Crear una macro excel que me actualize los datos.

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?

2 respuestas

Respuesta
2
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.
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
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.
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.
Seguro, aquí te envío el correo:
[email protected]
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.
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
Respuesta
2

Excelente, no fui yo quien hizo la pregunta pero necesita esta información.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas