Repetir Macros Aplication.sendkeys por 42. Y ejecutar la misma condición en la siguiente fila

Buenas Tardes compañeros expertos.

Estoy algo atorado con este proceso, tengo 50 líneas. En esas líneas pego unos valores de una hoja aparte, estos valores son una fórmula, pero requiro que se peguen como valor porque habrá ocasiones en que aplique a una hoja que aun no existe.

Después de pegarlas como valor, cree una macro para entrar a cada celda y salir, esto para que la fórmula se ejecute en cada línea.

Ok, este proceso se ejecuta 42 veces. Entrar y salir de cada celda.

Pero después de la primer línea, no se como hacer para que se pase a la siguiente línea y se corra otras 42 veces.

Ahora bien esto solucionaría mi problema. Pero hay algo que también me gustaría implementar.

Es que si en esa línea en la celda B5 ya no hay dato, que se detenga la macros y si no, que continué ejecutándose hasta que llegue a una línea que ya no tenga dato en la columna B

Adjunto la macro que se ejecuta 42 veces.

Sub Macro3()
' Macro3 Macro
N = 1
Do While N <= 42
Range("d4").Select
Application.SendKeys "{f2}", True
Application.SendKeys "{tab}", True
N = N + 1
Loop
Do While N <= 42
Range("d5").Select
Application.SendKeys "{f2}", True
Application.SendKeys "{tab}", True
N = N + 1
Loop

' final
End Sub

1 respuesta

Respuesta
1

Prueba lo siguiente:

Sub Macro3()
' Macro3 Macro
    n = 1
    Do While n <= 42
        If Range("B" & n + 3) = "" Then Exit Do
        Range("d" & n + 3).Select
        Application.SendKeys "{f2}", True
        Application.SendKeys "{tab}", True
        n = n + 1
    Loop
' final
End Sub

Para que acepte hay que poner la instrucción doevents, prueba con esta macro

Sub Macro3()
' Macro3 Macro
    n = 1
    Do While n <= 42
        If Range("B" & n + 3) = "" Then Exit Do
        Range("d" & n + 3).Select
        Application.SendKeys "{f2}", True
        Application.SendKeys "{tab}", True
        DoEvents
        n = n + 1
    Loop
' final
End Sub

Hola Dante Amor, gracias por contestar.

Te adjunto mi archivo. Ya puse la macros que me enviaste pero en la primer fila solo ejecuta la entrada y salida de la celda 1 vez... y en la segunda fila la ejecuta 3 veces.

https://www.mediafire.com/?9krn6ffb1t3ezdl 

Mira, la primer macros me lista los nombres de las hojas, y tengo una hoja donde se elaboran las fórmulas en base a "textos", una macros copia esa fórmula y la pega como valor en la hoja llamada "todas" y la macro que necesito es para que entre a la fórmula que traje de la otra hoja y salga para que se actualice como tal. Ya que si no se quedaría como texto.

Y tengo 50 filas en las cuales se debe repetir el proceso y no encuentro manera de hacerlo.

Espero me puedas ayudar, saludos... y gracias...

No puedo abrir archivo que me enviaste.

Prueba con la macro que tiene doevents

La columna "D" deberá tener formato general

¿O qué es lo que necesitas?

¿Quieres qué la macro se ejecute para todas las celda que están en la columna "D"?

Prueba con esto:

Sub arregla()
'Por.DAM
    Application.ScreenUpdating = False
    Columns("D:D").NumberFormat = "General"
    For i = 1 To Range("D" & Rows.Count).End(xlUp).Row
        Cells(i, "D").Select
        Application.SendKeys "{f2}", True
        Application.SendKeys "{tab}", True
        DoEvents
    Next
End Sub

La macro la deberás probar estando en la hoja de excel, ya que si estás en vba las teclas pueden ejecutarse en vba y no sobre la hoja de excel. Pon un botón en la hoja de excel y asigna la macro, presiona el botón para ejecutar la macro.

Mira te pongo una imagen.

http://subefotos.com/ver/?abcdd3a820bf81860800a71d84c8b920o.png#codigos 

Ok. Lo que quiero es que la macros entre a "D4" y salga a "E4" por eso las teclas "f2" y "tab". Ya que pegue una fórmula como valores y no se ejecuta hasta que entre y salga de la celda.

Y así sucesivamente hasta llegar a AS4 después de llegar a la AS4 que pase a la "D5" y salga a "E5" y es el mismo proceso.

A menos que la celda B5 este vacía. Si estuviera vacía se termina la instrucción.

Pero si no esta vacía que continué la macros por las filas 6, 7, 8 y así hasta que haya una "b" vacía.

No se si me logre explicar. Si tienes dudas dime a ver como te envío el archivo.

Con la siguiente macro recorres desde la fila 4 y hasta la última fila con datos que tenga la columna "B", para cada fila recorre desde la columna D y hasta la columna AS.

Sub arregla()
'Por.DAM
    Application.ScreenUpdating = False
    Columns("D:AS").NumberFormat = "General"
    For i = 4 To Range("B" & Rows.Count).End(xlUp).Row
        For j = Range("D1").Column To Range("AS1").Column
            Cells(i, j).Select
            Application.SendKeys "{f2}", True
            Application.SendKeys "{tab}", True
            DoEvents
        Next
    Next
End Sub

Recuerda ejecutar la macro desde la hoja y no desde VBA.

Muchas Gracias, si funciona, solo que en la "Q" ya no me funciona.
Lo demás funciona de maravilla, solo que ahí deja de actualizar la fórmula correspondiente y no se porque razón me pone el resultado de la primer fórmula.

 

Perdón por molestar tanto. saludos...

No es ninguna molestia, lo que puedo observar en la imagen es que esas fórmulas no empiezan con el símbolo =

Tienes esto en la celda "Q10"

140820-14 ZRF, 7.75

Y no veo el símbolo = por eso no lo convierte a fórmula

Hola, gracias.

Mira la primer macros que corro trae una serie de fórmulas respecto a las hojas, como a veces ya no existe alguna hoja o hay alguna nueva, decidí hacerla con macros, traer las fórmulas desde otra hoja y pegarlas como valores.

La macro que me diste funciona muy bien, pero al llegar a la columna QUE me deja unos datos que no se de donde salen, ya que todas las fórmulas son traídas anteriormente.

 

Efectivamente, no sé de dónde salen, lo único que hace es dar F2 y tab. Prueba con lo siguiente.

Sub arregla()
'Por.DAM
    Application.ScreenUpdating = False
    Columns("D:AS").NumberFormat = "General"
    For i = 4 To Range("B" & Rows.Count).End(xlUp).Row
        For j = Range("D1").Column To Range("AS1").Column
            Cells(i, j).Select
            x = Cells(i, j)
            Cells(i, j).Clear
            Cells(i, j) = x
            Application.SendKeys "{f2}", True
            Application.SendKeys "{tab}", True
            DoEvents
        Next
    Next
End Sub

Si la hoja no existe se va a abrir una ventana para buscar el libro con la hoja, si cierras la ventana la celda aparecerá con error #¡VALOR!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas