Compartir a través de

Duda Macro

Anónimas
2020-01-23T21:04:55+00:00

Buenas gente, tengo una duda con respecto al proceso de la siguiente macro 

Sub Macro1dp()

'

' Macro1dp Macro

' prueba

'

' Acceso directo: CTRL+d

'

    Range("AB1").Select

    ActiveCell.FormulaR1C1 = "pregate"

    Range("AB2").Select

    ActiveCell.FormulaR1C1 = _

        "=CONCATENATE(MID(RC[-18],9,2),""-"",MID(RC[-18],6,2),""-"",MID(RC[-18],1,4),"" "",MID(RC[-18],12,5))"

    Range("AB2").Select

    Selection.AutoFill Destination:=Range("AB2:AB31682")

    Range("AB2:AB70000").Select

    Selection.Copy

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Selection.Replace What:=":", Replacement:=":", LookAt:=xlPart, _

        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

        ReplaceFormat:=False

    Columns("AB:AB").EntireColumn.AutoFit

    Range("J1").Select

    ActiveCell.FormulaR1C1 = "pregat"

'-------------------------------------------------------------------------------------------------------------------

'-------------------------------------------------------------------------------------------------------------------

        Range("AC1").Select

    ActiveCell.FormulaR1C1 = "fh_ingreso_diferido"

    Range("AC2").Select

    ActiveCell.FormulaR1C1 = _

        "=CONCATENATE(MID(RC[-18],9,2),""-"",MID(RC[-18],6,2),""-"",MID(RC[-18],1,4),"" "",MID(RC[-18],12,5))"

    Range("AC2").Select

    Selection.AutoFill Destination:=Range("AC2:AC31682")

    Range("AC2:AC70000").Select

    Selection.Copy

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Selection.Replace What:=":", Replacement:=":", LookAt:=xlPart, _

        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

        ReplaceFormat:=False

    Columns("AC:AC").EntireColumn.AutoFit

     Range("K1").Select

    ActiveCell.FormulaR1C1 = "fh_ingreso_diferid"

 '-------------------------------------------------------------------------------------------------------------------

 '-------------------------------------------------------------------------------------------------------------------

           Range("AE1").Select

    ActiveCell.FormulaR1C1 = "fh_SALIDA"

    Range("AE2").Select

    ActiveCell.FormulaR1C1 = _

        "=CONCATENATE(MID(RC[-19],9,2),""-"",MID(RC[-19],6,2),""-"",MID(RC[-19],1,4),"" "",MID(RC[-19],12,5))"

    Range("AE2").Select

    Selection.AutoFill Destination:=Range("AD2:AD31682")

    Range("AE2:AE70000").Select

    Selection.Copy

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Selection.Replace What:=":", Replacement:=":", LookAt:=xlPart, _

        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

        ReplaceFormat:=False

    Columns("AE2:A2").EntireColumn.AutoFit

     Range("N1").Select

    ActiveCell.FormulaR1C1 = "fh_ingres"

 '-------------------------------------------------------------------------------------------------------------------

 '-------------------------------------------------------------------------------------------------------------------

End Sub

entiendo que con Active.cellFormula esta invocando la formula que ya tengo definida y que el origen de datos seria "[-18]" el cual fue asignado por defecto cuando escogí la celda J2,  proceso que se ejecuta bien, luego modifique el codigo (sin modificar la formula) para que el resultado de este fuera expresado en otra, esperando recibir los mismos datos de la consulta anterior, lo cual no fue así y me entrego valores correspondientes a la columna K lo cual fue inesperado pero correcto.

Ahora mi problema es el siguiente en la tercera vez que se ejecuta debo sacar los datos desde la columna M (construi el ultimo codigo en una nueva macro en la cual indicaba como origen de datos la celda M2) y el anterior [-18] ahora es [-19] (como se muestra en el cogido) pero me arroja los valores de la columna L.

Mi consulta es la siguiente . como puedo especificar el origen de datos modificando este codigo?

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

3 respuestas

Ordenar por: Muy útil
  1. Anónimas
    2020-01-24T11:25:21+00:00

    EStá claro que lo has hecho con la grabadora de macros.

    todos los select SOBRAN. Esto:

     Range("AB1").Select

     ActiveCell.FormulaR1C1 = "pregate"

    puedes sustituirlo por Range("AB1")= "pregate"

    y esto:  Range("AE2").Select

        Selection.AutoFill Destination:=Range("AD2:AD31682")

    por range("AE2).autofill ....

    con macros, es mucho mejor referenciar las celdas utilizando dos variables (normalmente i, j) para referencias las celdas. en lugar de Range("A1"), cells(1,1)  y si es el rango  Range("A1: A10"),  Range(cells(1,1), cells(10,1)).

    Y otra cosa: utilizar código para escribir fórmulas es una TONTERÍA.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  2. Héctor Miguel 71,595 Puntos de reputación
    2020-01-24T04:22:16+00:00

    la fracción de código que expones lo que hace es:

    1. selecicona la celda [AB1] y le pone un título (pregate)
    2. selecciona la celda [AB2] y pone una fórmula con referencia 18 columnas a la izquierda (columna J)

    [ ... ]

    en la segunda "pasada"...

    1. selecciona la celda [AC1] y le pone un título (fh_ingreso_diferido)
    2. selecciona la cela [AC2] y pone una fórmula con referencia 18 columnas a la izquierda (columna K)

    [ ... ]

    en la tercera "pasada"...

    1. selecciona la celda [AE1] y le pone un título (fh_SALIDA)
    2. selecciona la celda [AE2] y pone una fórmula con referencia 19 columnas a la izquierda (columna L)

    si en esta tercera "pasada" quieres referir a la columna "M" ? => regresa SOLO 18 columnas (NO 19) como en las anteriores

    lo que no es claro es el por qué derramas la fórmula hasta la fila 31682, MAS AUN...

    en la tercera "pasada" en lugar de "derramar" la fórmula en la misma columna (AE) lo haces en la siguiente (columna AD) ???

    tampoco es claro el por qué en todos los casos "conviertes" a constantes hasta la fila 70000 (???)

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  3. Anónimas
    2020-01-23T21:56:35+00:00

    … entiendo que con Active.cellFormula esta invocando la formula que ya tengo definida...

    ¡No!, ActiveCell hace referencia a la celda que está activa en ese momento (sin más).

    ActiveCell.Formula (no Active.cellFormula) inserta una fórmula en la celda activa, en un caso como …

    ActiveCell.FormulaR1C1 = "=CONCATENATE(… "   (la fórmula empieza con  = )

    ... pero no en un caso como...

    ActiveCell.FormulaR1C1 = "fh_ingres"

    ... que lo que hace es escribir el texto entrecomillado en la celda activa.

    Para el resto, sin 'ver' como tienes los datos, y sin saber lo que pretendes conseguir... yo...  ni leo tu código.  

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios