Copiar celdas excel con VBA

Resulta que en una hoja excel, tengo unas celdas variables, que cogen datos de un autómata y varían bastante. Necesito que cada 5 seg, copie los datos de esas celdas a otras, copiando los valores que haya en ese momento y que los copie en distintas filas.

He conseguido hacer que la macro se ejecute cada por tiempo, pero no que copie.

1 Respuesta

Respuesta
1

Quizás te sirva este ejemplo que preparé hace tiempo: http://www.jrgc.es/ejemplos/ejemplo_20101123a.xls

No es exactamente lo mismo, porque aquélla consulta era para conseguir un listado de los tiempos cronometrados manualmente, pero creo que el problema es similar.

Saludos_

Hola, muchas gracias por tu aporte, me ha venido muy bien para modificarlo un poco. El problema que tengo ahora es para parar el modo ontime, que no consigo hacerlo. Te pongo lo que tengo hecho:

Sub Inicio_reg()
Dim Tiempo
'Ponemos en la última fila los valores actuales.
Dim lngÚltimaFila As Long
With Worksheets("Hoja1")
         lngÚltimaFila = .[B65536].End(xlUp).Row + 1
        .Cells(lngÚltimaFila, 1).Value = Now
        .Cells(lngÚltimaFila, 2).Value = .[B2].Value
        .Cells(lngÚltimaFila, 3).Value = .[C2].Value
        .Cells(lngÚltimaFila, 4).Value = [D2].Value
        .Range("B" & lngÚltimaFila & ":D" & lngÚltimaFila).NumberFormat = ""
End With
Tiempo = DateAdd("s", [G3].Value, Time)
Application.OnTime EarliestTime:=Tiempo, Procedure:="Inicio_reg"
End Sub
Sub Parar_reg()
'Desactivar el evento Ontime
Application.OnTime EarliestTime:=Now, Procedure:="Inicio_reg", LatestTime:=0, Schedule:=False
MsgBox "Registro parado", vbInformation, "Registro detenido por el usuario"
End Sub

Que necesito para parar la secuencia?

Muchas gracias.

Yo declararía la variable Tiempo explícitamente como Date (Dim Tiempo as Date), y lo haría a nivel de módulo (antes de la línea "Sub Inicio_reg())

Una vez hecho esto, creo que habría que sustituir "EarliestTime:=Now" por "EarliestTime:=Tiempo" en la instrucción que debe desactivar el evento.

Saludos_

Buenos días,

He hecho algunos cambios, para lo que necesito en realidad, que es copiar los datos de una hoja en otra, pero en el paro me sigue dando error. Tengo esto, con lo que me has comentado:

Dim Tiempo As Date
Sub Inicio_reg()
'Ponemos en la última fila los valores actuales.
Dim lngÚltimaFila As Long
With Worksheets("Scada")
lngÚltimaFila = Worksheets("Registro").[B65536].End(xlUp).Row + 1
Worksheets("Registro").Cells(lngÚltimaFila, 1).Value = Now
Worksheets("Registro").Cells(lngÚltimaFila, 2).Value = Worksheets("Scada").[C4].Value
Worksheets("Registro").Cells(lngÚltimaFila, 3).Value = Worksheets("Scada").[C5].Value
Worksheets("Registro").Cells(lngÚltimaFila, 4).Value = Worksheets("Scada").[C6].Value
.Range("B" & lngÚltimaFila & ":D" & lngÚltimaFila).NumberFormat = ""
End With
Tiempo = DateAdd("s", Worksheets("Registro").[E5].Value, Time)
Application.OnTime EarliestTime:=Tiempo, Procedure:="Inicio_reg"
End Sub
Sub Parar_reg()
'Desactivar el evento Ontime
Application.OnTime EarliestTime:=Tiempo, Procedure:="Inicio_reg", LatestTime:=0, Schedule:=False
MsgBox "Registro parado", vbInformation, "Registro detenido por el usuario"
End Sub

Muchas gracias.

Di por seguro que el sub para detener el OnTime está en el mismo módulo que el resto del código. Si esto no fuese así, lo primero que habría que hacer es declarar la constante Tiempo como pública.
Otra cosa que convendría hacer (por probar) es quitar LatestTime:=0. Con EarliestTime, Procedure y Schedule es suficiente.

Me temo que no se me ocurre nada más.

Saludos_

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas