Muchas veces nos veremos en la necesidad de realizar acciones a una hora determinada, por ejemplo:
1) cerrar el libro
2) efectuar un backup de datos
3) llamar a un procedimiento o funcion
4) etc, etc.
Para los que venimos programando en Visual Basic existe un control al que extrañamos bastante: el Timer. Pero puede ser bastante bien reemplazado con un método del objeto Application: OnTime(), el cual posee cuatro argumentos; los dos primeros obligatorios y los dos ultimos opcionales.
Sintaxis:
Application.OnTime Tiempo, Procedimiento, [Fin], [Agenda]
1) Tiempo: a que hora se ejecutará el Sub indicado
2) Procedimiento: nombre del Procedimiento
3) Fin: hora límite a partir de la cual el Procedimiento dejará de ejecutarse (opcional)
4) Agenda: True o False. Lo ponemos en False si queremos anular el procedimiento (opcional)
Veamos un ejemplo aplicable a lo mencionado en el primer párrafo: quiero cerrar el libro activo a una hora determinada. Primero deberemos crear el procedimiento, al que luego llamaremos con OnTime
Sub CerrarLibro()
'le indico que no guarde los cambios (xlDoNotSaveChanges)
ActiveWorkbook.Close xlDoNotSaveChanges
End Sub
'le indico que no guarde los cambios (xlDoNotSaveChanges)
ActiveWorkbook.Close xlDoNotSaveChanges
End Sub
Ahora bien... ¿donde meto OnTime? Hay que buscar un "disparador" y, en la mayoría de los casos, utilizaremos el que se produce al abrir el libro. Puede ser cualquiera, pero para este ejemplo es el mas indicado.
Vamos al explorador de proyectos / microsoft excel objetos y hacemos doble click sobre ThisWorkBook ("este libro"). La ventana es igual a la de cualquier módulo, con la (gran) salvedad de que aquí controlaremos distintos eventos que se producen en el libro.
Primero, elegimos en la lista de la izquierda "workbook" y en la lista de la derecha "open". Como vemos en la imagen, el Sub se escribe solo.
Vamos al explorador de proyectos / microsoft excel objetos y hacemos doble click sobre ThisWorkBook ("este libro"). La ventana es igual a la de cualquier módulo, con la (gran) salvedad de que aquí controlaremos distintos eventos que se producen en el libro.
Primero, elegimos en la lista de la izquierda "workbook" y en la lista de la derecha "open". Como vemos en la imagen, el Sub se escribe solo.
todo código escrito dentro de este Sub se ejecutará cada vez que abramos el libro
Dentro de este Procedimiento escribimos la siguiente instrucción:
Application.OnTime TimeValue("13:45:00"), "CerrarLibro"
quedándonos de la siguiente forma:
Private Sub Workbook_Open()
Application.OnTime TimeValue("19:47:00"), "CerrarLibro"
End Sub
Application.OnTime TimeValue("19:47:00"), "CerrarLibro"
End Sub
Si bien esto es de utilidad, en la mayoría de los casos necesitaremos que la macro se ejecute transcurrida una determinada cantidad de tiempo, por ejemplo, a los 15 minutos de haberse abierto el libro. El código necesita un pequeño agregado:
Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:15:00"), "CerrarLibro"
End Sub
Application.OnTime Now + TimeValue("00:15:00"), "CerrarLibro"
End Sub
Extemadamente fácil: como primer argumento, le paso el tiempo actual mediante Now, sumándole 15 minutos. Colocando correctamente el tiempo, podemos modificarlo y adaptarlo a nuestro antojo.
Recordemos que este método puede ser invocado desde cualquier evento, no solamente al abrir el libro... bien podríamos llamarlo desde un simple botón o al activarse determinada hoja o celda.
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Hola Damian, Cordial saludo
ResponderEliminarSolicito tu ayuda, trengo problemas al abrir un archivo realizado en excel 2007, para abrirlo en 2010, con el código de encriptar que vos mismo muy amablemente nos brindaste, y es lo siguiente:
Siempre que abro el libro en excel 2010, muestra un mensaje diciendo: Excel ha encontrado contenido que no se puede leer. Desea recuperarlo?, y al decir SI, abre el libro, pero:
1. El libro contiene vínculos a otros orígenes, como ver esos vínculos y elimininarlos cuando yo no tenía ningún tipo de vínculos?
2. Muestra error 16360 02.xlm
Registros quitados Rango con nombre de /xl/workbook.xlm parte (libro)
Si le doy click en el enlace, presenta la misma información en una página web en html,
3. Pero cada vez que abro el libro se presenta la misma situación
4. Al registrar el serial y darle aceptar lanza una advertencia de:
Microsoft Visual Basic:
Se ha producido error "1004", Error en el método "Save", de objeto "_Workbook", y por supuesto no permite abrir la aplicación.
ESTE ES EL CÓDIGO QUE TENGO EN EL WORKBOOK
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Sheets("BIENVENIDA").Select
Range("D17").Select
' Codigo Encriptar No. Serie
If Sheets("xxx").Range("a3").Value = 1 Then Exit Sub
' Toma los 3 primeros caracteres del path en donde se ejecuta el libro,
'y así obtengo, por ejemplo, C:\ ó cualquier otra letra
Ruta = Left(ActiveWorkbook.Path, 3)
If DiscoApto(Ruta) = False Then
'si la funcion es False, aviso y cierro el libro:
MsgBox "No se pueden Copiar los archivos al disco duro de su máquina.", vbCritical, "Error"
ActiveWorkbook.Close xlDoNotSaveChanges
Else
With Sheets("xxx")
'si se ejecuta en el disco correcto, guardo su nro de serie
.Range("A1").Value = TomarNroDeSerie(Ruta)
'encripto el nro de serie y lo guardo:
.Range("A2").Value = EncriptarNroDeSerie(.Range("A1").Value)
End With
'en la hoja "bienvenida" (que será la única visible del proyecto)
'coloco en A2 el nro de serie del disco, avisando al cliente que
'debe pasarmelo para activar el libro:
Sheets("BIENVENIDA").Range("A2") = Sheets("xxx").Range("A1").Value
End If
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Private Sub CommandButton1_Click()
frmActualizar.Show
End Sub
Y ESTE ES EL CÓDIGO QUE TENGO EN EL BOTON
Unload Me
Sheets("VBA Times").Visible = True
Sheets("VBA Times").Select
Hoja1.Visible = True
Hoja2.Visible = True
Hoja3.Visible = True
Hoja4.Visible = True
Hoja5.Visible = True
Hoja7.Visible = True
Sheets("BIENVENIDA").Visible = False
End If
End If
End If
End If
ActiveWorkbook.Save
End Sub
Gracias por tu colaboración
Armand
Quizas uno de los problemas a que debes guardarlo como "libro habilitado para macros".
ResponderEliminarEnviame el archivo asi lo estudio un poco y veo si puedo solucionarlo.