A ver si me podéis ayudar. Estoy trabajando en hojas de excel con vínculos a cotizaciones de bolsa. Las cotizaciones van variando a lo largo del día y me gustaría que se creara un registro (a modo de tabla) que refleje los cambios en función de la hora y así poder crear un gráfico intradía. Supongo que se tendrá que usar una macro que grabe los datos cada por tiempo.
Ayuda!
1 respuesta
Respuesta de hugolaza
1
1
hugolaza, Formulas avanzadas, Macros, sistemas cerrados mediante VBA con...
Esta rutina puede ayudar. En una hoja en blanco en el Rango A2:A25 escribe 00:00, 01:00, 02:00, 03:00,,,, 23:00 * Abre el Editor de Visual Basic Alt-F11 * En la ventana Proyecto, habitualmente en la parte centro-superior-izquierda de tu pantalla, ubica ThisWorkBook debajo de Microsoft Excel Objects y haz doble click. *En el módulo en blanco que aparece, copia el siguiente codigo Dim sStart As Single Private Sub Workbook_Open() On Error Resume Next sStart = True Actualizar TemporizadorOn End Sub Ahora del menú de Herramientas, haz click en Insertar - Módulo. En el módulo en blanco que aparece, copia el siguiente código : Dim bState As Boolean Sub TemporizadorOn() On Error Resume Next Sheets("Hoja1").Range("A1") = "Tempor On" Sheets("Hoja1").Range("A1").Interior.ColorIndex = xlNone Dim sStart As Single bState = True Do While bState sStart = Timer Do While (bState And Timer < sStart + 1800) DoEvents Loop Actualizar Loop End Sub Sub Actualizar() Application.ScreenUpdating = False HojaOriginal = ActiveSheet.Name Sheets("Hoja1").Select CeldaOriginal = ActiveCell.Address HoraActual = Format(Now(), "hh") Range("A1").Select Do While Format(ActiveCell, "hh") <> HoraActual ActiveCell.Offset(1, 0).Select Loop Fila = ActiveCell.Row DiaActual = Format(Now(), "dd-mm-yy") Range("B1").Select Do While Format(ActiveCell, "dd-mm-yy") <> DiaActual And ActiveCell <> "" ActiveCell.Offset(0, 1).Select Loop If ActiveCell <> Format(Now(), "dd-mm-yy") Then ActiveCell = Format(Now(), "dd-mm-yy") Col = ActiveCell.Column Cells(Fila, Col) = Range("Dato") Range(CeldaOriginal).Select Sheets(HojaOriginal).Select ActiveWorkbook.Save Application.ScreenUpdating = True End Sub Sub TemporizadorOff() bState = False Sheets("Hoja1").Range("A1") = "Tempor OFF" Sheets("Hoja1").Range("A1").Interior.ColorIndex = 36 End Sub En la linea : Cells(Fila, Col) = Range("Dato") coloca el rango del dato que quieres registrar. Cierra el Editor de Visual Basic. Graba el Libro, ciérralo y vuelve a abrirlo. Cuando la rutina esta ejecutándose notarás que no puedes maniobrar libremente por Excel, así que tienes que detener el temporizador, trabajar en tu hoja y luego encender nuevamente el temporizador. Para detener el Temporizador : Pulsa Alt-F8 - Selecciona TemporizadorOff - Aceptar Para iniciar el Temporizador : Pulsa Alt-F8 - Selecciona TemporizadorOn - Aceptar