Crear una macro excel que me actualize los datos.

Saludos.
El problema principal que tengo es el siguiente: Estoy importando datos de una página web, pero estoy creando un reporte automático y necesito que estos datos se actualicen cada día a las 11:00 am.
Lo único que consigo es el menu de propiedades de rango de datos y actualizar datos cada "X" minutos, pero esto no me sirve, y no logro hacerlo a una hora determinada.
Existirá una macro que haga esto posible,¿?, ¿O sea se conecte a la página web y actualize los datos que yo tengo seleccionados en mi hoja excel a una hora?
Gracias.
2

2 respuestas

1
Respuesta de
Hola, claro que que es posible hacer lo que tu quieres con una macro, primero tenemos que generar la macro de tu importación de datos desde Web y luego ponemos las lineas de código para poder la hora a la que quieres que eso se realize.
Abre tu libro de excel, pulsas en Herramientas>Macros>Grabar nueva macro en la ventana que aparece le das un nombre a tu macro por ejemplo Actualiza_Base pulsas en aceptar y ahora todo lo que tua hagas se ira trasladando a lineas de código en VBA, pulsas en Datos>Obtener Datos Externos>Nueva Consulta Web en la ventana que se abre arriba en la barra de dirección pones la dirección de la página Web y pulsas en Ir cuando estés situado en ella marcas las tablas que quieres importar, y pulsas abajo en importar.
Cuando hayas echo esto y tengas los datos recogidos en tu hoja de Excel, pulsas nuevamente en Herramientas>Macros>Detener Grabación.
Ya tenemos la macro construida, si pulsas Alt+F11 se abrirá el editor de VBA y podrás ver tu macro generada.
Si en algún paso te has confundido borra la macro y vuelves a crear otra nueva y vuelves a grabarla.
Para probarla, borras todos los datos importados y abres el editor de VBA cuando estés situado en tu macro pulsas arriba en ejecutar (es un icono de play como en los reproductores de audio) si la macro funciona correctamente te importará los datos de forma automática.
Una vez echo esto, vamos a ponerlo de forma que se ejecute todos los días a las 11:00
Abres el Editor de VBA (ya sabes Alt+F11) te sitúas en la primera linea de tu macro que debería ser algo así, si seguiste el nombre del ejemplo:
Sub Actualiza_Base()
Pulsas ejecutar del teclado Intro para que las lineas bajen y te deje espacio encima para escribir nuevas lineas, ahora escribes esto:
Sub Auto_Open()
Sub Auto_Open()
Application.OnTime TimeValue("11:00"), "Actualiza_Base"
End Sub
____________________________________________________________
Se te habrá generado una linea que separan las dos macros, como esta que he puesto yo, ahora te explico lo que va a hacer, esta macro ejecutará tu macro a la hora que hemos puesto a las 11:00 a esa hora buscará la siguiente macro que hemos puesto Actuliza_Base que estará a continuación de esta, y como ya comprobastes se ejecuta correctamente, y actualizará tu base de datos. ¡OJO! Para que funcione después de todo debes de guardar los cambios, cerrar el Libro y volverlo a abrir, y tiene que estar abierto a esa hora aunque esté minimizado.
Haz todo lo que te dicho y me cuentas.
>Un saludo
>JUlio
Muchas Gracias por tu ayuda, la acabo de programar, y la voy a dejar corriendo el fin de semana a ver sin funciona, Cualquier cosa te estaré comentando.
Saludos.
De acuerdo, espero noticias fantásticas... jajajaja
>Un saludo
>Julio
Saludos Julio.
Todavía presento problemas. La macro corre solo el primer día, y después no actualiza el resto de la semana.
Una pregunta.?.. Solo con abrir el archivo la macro se ejecuta atomaticamente, ¿o es necesario ir al menu de macros y ejecutar la misma diariamente?.
Saludos.
Hola, la macro siempre que detecte como hora del sistema las 11:00 se ejecutará, pero ya te he dicho que el Libro tiene que estar abierto, el la respuesta repetí la linea de código de inicio debes poner solo una linea:
Sub Auto_Open()
Application.OnTime TimeValue("11:00"),"Actualiza_Base"
End Sub
__________________________________________________________
Private Sub Actualiza_Base()
Tu codigo
End Sub
Si esto está así en un módulo claro, te funcionará siempre. Pero recuerda que tiene que estar el libro abierto.
>Un saludo
>Julio
Compañero, lamentablemente no me esta funcionando.
Te comento que tengo el archivo abierto, y tengo varias hojas activas, la que me interesa esta en la hoja 11, te anexo el código, pero lo que hago es lo siguiente:
Abro el archivo, selecciono la hoja 11, y espero al día siguiente, pero no funciona .!..
Anexo el código:
Sub Auto_Open()
Application.OnTime TimeValue("11:00:00"), "Hoja11.Copiar_valores"
End Sub
Sub Copiar_valores()
Dim f As Integer
Dim c As Integer
f = 163
c = 2
Do Until Cells(f, c).Value = ""
If Cells(f, c).Value = "N" Then
Else
Cells(f, c + 1).Value = Cells(f, c).Value
End If
f = f + 1
Loop
f = 163
c = 6
Do Until Cells(f, c).Value = ""
If Cells(f, c).Value = "N" Then
Else
Cells(f, c + 1).Value = Cells(f, c).Value
End If
f = f + 1
Loop
f = 163
c = 10
Do Until Cells(f, c).Value = ""
If Cells(f, c).Value = "N" Then
Else
Cells(f, c + 1).Value = Cells(f, c).Value
End If
f = f + 1
Loop
f = 163
c = 14
Do Until Cells(f, c).Value = ""
If Cells(f, c).Value = "N" Then
Else
Cells(f, c + 1).Value = Cells(f, c).Value
End If
f = f + 1
Loop
f = 163
c = 18
Do Until Cells(f, c).Value = ""
If Cells(f, c).Value = "N" Then
Else
Cells(f, c + 1).Value = Cells(f, c).Value
End If
f = f + 1
Loop
f = 163
c = 22
Do Until Cells(f, c).Value = ""
If Cells(f, c).Value = "N" Then
Else
Cells(f, c + 1).Value = Cells(f, c).Value
End If
f = f + 1
Loop
ActiveWorkbook.Save
End Sub
Hola te he dicho que la macro debe de estar en un modulo que debes de insertar en tu hoja 11 y ahí poner el código del tiempo y de la actualización. Tu macro debería comenzar dirigiéndote a la hoja que quieres que se ejecute el código debería de ser algo así:
Sub Copiar_Valores()
Sheets("Hoja11").Select
Ahora todo tu codigo
End Sub
Entiendes que tienes que abrir el editor de VBA y en el lado izquierdo insertar un modulo, primero pones la macro de Auto_Open y a continuación la tuya comenzando en la primera linea de código después de declarar las variables que ponga activa la hoja 11.
Prueba esto y me cuentas.
>Un saludo
>Julio
Disculpa la insistencia, pero todavía nada, ahora me arroja un error.
Lo que hice fue eliminar mis macros, luego abrir el editor de Visual Basic, y agarrar el modulo 1, e insertar primero:
Sub Auto_Open()
Application.OnTime TimeValue("15:00:"), "Copiar_valores"
End Sub
Sub Copiar_valores()
Dim f As Integer
Dim c As Integer
f = 163
c = 2
Sheets("Hoja11").Select
...El resto de mi macro.
End sub
Luego a las 15:00 me arrojo lo siguiente:
" Se ha producido un error "9" en tiempo de ejecución. Subíndice fuera del intervalo.
Y al darle Depurar, me subraya en amarillo: Sheets("Hoja11).Select.
La verdad no entiendo que paso .
Saludos.
Hola, no sé si has copiado y pegado la macro o la has vuelto a escribir y por lo tanto hay errores en la hora veo que has puesto ("15:00:") evidentemente te faltan los segundos y en lo que te subraya pones ("Hoja11) pero te faltan las comillas del cierre ("Hoja11").
Comprueba esto y me cuentas.
>Un saludo
>Julio
Bueno, revisé y estaba bien, fue que me equivoque transcribiendo, pero lo ejecuto y me arroja el mismo error, de verdad no se que estará pasando.
SI tienes alguna idea de que error puedo estar cometiendo, me ayudaría.
Saludos y gracias.
Ponme tu correo y te envío uno para que me envíes el archivo, yo no entiendo que te ocurre a mi me ha funcionado perfectamente siempre.
Un saludo
Seguro, aquí te envío el correo:
ivanrlobato@gmail.com
Gracias.
Se me olvido decirte algo,
Yo dejo el archivo de excel abierto, en la Hoja11, que es donde tengo mi página principal, pero la maquina la dejo bloqueada, o sea control-alt-del y bloqueo el usuario, paera que nadie la modifique. ¿Esto puede afectar el procedimiento de la macro?
Saludos.
Hola, en local cuando un programa se esta ejecutando y pulsamos Windows+L el programa sigue trabajando, pero en un pc que esta en una red si el usuario esta bloqueado no puede trabajar, no puede conectarse en base de datos externa, evidentemente ahí estaba el problema y me estabas volviendo loco, para que veas que funciona correctamente pon otra linea de código a otra hora, pasados por ejemplo 2 minutos, y deja el archivo abierto, verás como se actualiza a esa hora y pasados 2 minutos vuelve a actualizarse, ahora bloquea el usuario, verás como la actualización pasados 4 minutos no se realiza:
Application.OnTime TimeValue("15:00"), "Copiar_valores"
Application.OnTime TimeValue("15:02"), "Copiar_valores"
Application.OnTime TimeValue("15:04"), "Copiar_valores"
Ya me contarás.
>Un saludo
>Julio
Saludos, ahora estoy probando con la maquina desbloqueada, lo voy a probar esta semana y te cuento.
Gracias.
Vale de acuerdo
No vale, yo creo que me rindo.
La página actualizó perfecto el día de ayer, pero hoy cuando la revise a las 11:15, no había actualziado nada, tengo el mismo problema de antes que solo se actualiza el primer día, y luego no hace nada. Y eso que tengo la página desbloqueada con la hoja de excel abierta y nadie utilizando la maquina...
Hola, vale ya solo nos queda otra solución, y es poner en una celda que no utilices este código:
Private Sub Workbook_Open()
Hoja1.Range("E15") = Format(Now, "dd-mm-yy hh:mm")
Application.OnTime (Now + TimeValue("15:00:00")), "Copiar_Valores"
End Sub
En un modulo pones tu macro Copiar_Valores dejando la de arriba en la apertura del Libro
Cambia la Hoja y el Rango a tu necesidad, tan solo será auxiliar para que se ejecute tu macro, así cambiará el día y siempre se ejecutará, me ha costado pero ya funciona.
Pruebalá, seguro que te funciona, y de paso también bloquea el PC y lo compruebas
>Un saludo
>Julio
Muchas gracias.
Dejame intentarlo, te avisare los resultados.
Disculpa mi ignorancia.
Pero para mi una celda es por lo menos la celda A2, ahora no entiendo como poner un código en una celda, o tu te refieres a otra cosa.?.
Saludos.
Hola, cuando te digo que utilices una celda vacía par que ponga el código lo que hará en esa celda la linea de código que te he puesto es poner la fecha y la hora por eso yo te he puesto una que se me ha ocurrido que yo te he pedido que la elijas tú no sea que E15 la tengas ocupada por tus datos.Si eliljes otra cambiala en el código, te lo puse en negrita al igual que la hoja si quieres en otra hoja también la cambias.
El código significa esto
En la hoja1 celda E15 me pones la fecha y la hora, esta la tomará de referencia para que cuando haya pasado un día y vuelva a tener la celda la hora que tu quieres vuelva a ejecutarse la macro Copiar_Valores.
>Un saludo
>Julio
Ok. Te explico lo que hice para probar.
Abrir un archivo nuevo en excel, con la tecla derecha del mouse le di Ver códigos, luego en la hoja que se llama ThisWorkbook, pegue esta macro:
Private Sub Workbook_Open()
Hoja1.Range("E15") = Format(Now, "dd-mm-yy hh:mm")
Application.OnTime (Now + TimeValue("11:00:00")), "Copiar_Valores"
End Sub
Luego abrí un modulo nuevo, el Modulo1 y pegue mi macro:
Sub Copiar_valores()
...............
End Sub
Ahora a esperar a ver si funciona...
Te informare ..!
Saludos.
De acuerdo, un saludo
Añade un comentario a esta respuesta
0
Respuesta de

Excelente, no fui yo quien hizo la pregunta pero necesita esta información, te felicito y agradezco el tiempo que empleaste en esta respuesta; Gracias.

Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: