Tengo una aplicación que hace que el valor de una celda en exel cambie constantemente... Lo que necesito ahora es capturar el valor de esa celda cada cierto tiempo (cada 10 minutos) y guardarlo en un registro que puede ser otra hoja del mismo libro, mejor dicho necesito llevar un registro de los valores que me muestra esa celda y quiero que el muestreo se haga cada cierto tiempo.
Se puede utilizar el método Application. OnTime. (1) StartTemporizador: Inicia el temporizador (2) Stoptemporizador: Termina el temporizador (es importante terminarlo) (3) tu_Sub: Tus instrucciones Espero que te sea útil/anders Public datHora As Date Public Const conIntervalo = 600 'diez min. Public Const conRunMacro = "Tu_Sub" 'tu proced. Sub StartTemporizador() datHora = Now + TimeSerial(0, 0, conIntervalo) 'iniciar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=True End Sub Sub tu_Sub() MsgBox datHora 'o cualquier instrucción 'reiniciar el temporizador StartTemporizador End Sub Sub StopTemporizador() On Error Resume Next 'desactivar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=False End Sub
Para lograr lo que quieres conozco dos alternativas: Usando el método OnTime de Excel Usando API de Windows Eres muy poco explicito y no das detalles de tus conocimientos de programación, así que asumiré que: no tienes problemas para implementar una macro y que te gusta investigar... Para el uso del método OnTime puede leer el articulo que esta en mi página http://www.sistemaslym.net/vba/excel/exarc1.html En el se explica su uso entre otras cosas... Para el uso de API de Windows, el siguiente ejemplo te muestra un reloj en la celda A1, si analizas el código, puedes, adaptarlo a los 10 minutos que quieres y que no muestre el reloj, sino que mueva o registre el valor de la celda que te interesa, saludos... Mauricio Option Explicit Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, _ ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, _ ByVal nIDEvent As Long) As Long Dim TimerID As Long Private Sub IniciarTimer(ByVal Intervalo As Long) #If VBA6 Then TimerID = SetTimer(0, 0, Intervalo, AddressOf TimerExecute) #End If End Sub Public Sub DetenerReloj() KillTimer 0, TimerID End Sub Private Sub TimerExecute() Dim strReloj As String On Error Resume Next strReloj = Format(Now, "HH:mm:ss") 'ActiveCell.Value = strReloj Range("A1").Value = strReloj End Sub Public Sub IniciarReloj() Range("A1").Font.Bold = True IniciarTimer 1000 End Sub *==========================================* La presente respuesta ha demandado un tiempo de lectura, análisis, elaboración y redacción. A cambio, simplemente, pretendo que te tomes un minuto para FINALIZARLA, si hubiera satisfecho -en alguna medida- tu requerimiento. En caso contrario, puedes preguntarme nuevamente aclarando qué entendí mal o qué faltó.