Abrir archivo excel automáticamente a las 10:00 AM
Quisiera saber si hay forma de poner un código en VB para que abra automáticamente un Archivo Excel, todos los días a las 10:00 AM, he leído por la red que poniendo un timer, pero no he logrado hacerlo, la ruta del archivo es C:\Documents and Settings\Desktop\Administración 2011\CORTES DE CAJA\AGOSTO, además que el archivo que abra sea el del nombre que aparece en la Celda A1.
Espero su respuesta, y agradecimiento si es posible su ayuda.
Respuesta de calvuch
2
2
calvuch, las fallas constantes de esta web me cansaron!! me voy a...
Excel no tiene control timer, tendrías que hacerlo vía código... y de todas maneras para que tener un bucle contando segundos si para abrir archivos puedes utilizar el panel de tareas programadas de windows. Que ya hace eso. O sea para que escribir código para una labor que ya windows hace
Entiendo, mi Problema es que la PC donde lo deseo hacer no tiene esta opción pues es una PC IBM, además esta en Ingles y realmente por más que le he buscado no encuentro esta opción en el Windows que tiene instalada la PC, por ello opte a un código de VB De igual manera agradezco tu interés y pronta respuesta, espero aclaración o ayuda si puedes para configurar con el Windows que tengo, si le doy click secundario a mi PC dice en Propiedades System: Windows Embbeded POSReady 2009, Version 2.0 Service Pack 3. Atentamente Enrique Castro
Mmmm ya veo.. ese es un windows incrustado!. Si presionas F1 y pones "Control Panel" o "scheduled Tasks" debería aparecer la info relacionada primero al panel de control o trareas programadas ( si es que esa versión tiene la aplicación). Revisa y me cuentas... antes de ponerme a editar código
Muchas gracias, ya he logrado crear una tarea programada y me ha funcionado bien, mi problema es que a diario el nombre del archivo cambia, pues el nombre que se le establece es la fecha del día, por ejemplo el archivo hoy se llama 20-08-2011, mañana se llamará 21-08-2011, alguna idea de lo que puedo realizar o como programar la tarea para que abra de la carpeta el archivo que tenga la fecha del sistema. Nuevamente agradezco mucho tu ayuda.
Mmmm, vaya no contaba con tu astucia, je, je, je. Bueno, en ese caso no queda más que meter mano a visual basic Bueno probemos esto. Tu propio panel de tareas programadas En un libro ( piede ser uno nuevo o bien en el que uses a diario), que debas tener abierto al menos hasta pasada las 10:00 am para que funcione lo que deseas, debes hacer lo siguiente Inserta una hoja con el nombre de "TAREAS" así en mayúscula pero sin comillas En esa hoja dispondrás los siguiente rótulos: celda A1 = Fecha B1=hora c1 =Ruta d1=estado Ahora desde la fila 2 hacia abajo como ya dedujiste completas la info para cada rotulo: ejemplo: A2= 22-08-2011 b2=10:00 c= c:\miarchivo.xls d2=se deja vacia De esta forma puedes programar la aptertura de ese archivo para todo el mes insertando la ruta y nombre y como ya sabes que cambiara todos los días te anticipas a ese evento digitando esa parte del nombre archivo que cambiara. ¿Se entiende?. Ahora veamos el código: Desde el editor de Visual basic (ALT+F11) insertaras un modulo y en este modulo pegas esto: Option Explicit Public InicialTime As Date Public EarlTime As Date ' Declaración del api ShellExecute Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long 'Constantre para el modo en que se abre la ventana: Normal Public Const SW_SHOWNORMAL = 1 Sub abrir() Dim t As Integer Dim r As Range Dim extension As String Dim ruta As String t = Application.WorksheetFunction.CountA(Sheets("TAREAS").Range("A1" & ":" & "A65536")) If t = 0 Then cancela_tareas: Exit Sub For Each r In Sheets("TAREAS").Range("A2" & ":" & "A" & t) extension = Trim(UCase(Mid(r.Offset(0, 2), Len(r.Offset(0, 2)) - 2))) ruta = Trim(r.Offset(0, 2)) Select Case extension Case Is = "XLS" If Time >= CDate(r.Offset(0, 1)) And r.Offset(0, 3) <> "Ejecutado" And Date = CDate(r) Then ShellExecute Application.hwnd, "Open", ruta, _ vbNullString, _ vbNullString, _ SW_SHOWNORMAL r.Offset(0, 3) = "Ejecutado" '/ abrir un dcTo Excel End If Case Is = "DOC" If Time >= CDate(r.Offset(0, 1)) And r.Offset(0, 3) <> "Ejecutado" And Date = CDate(r) Then ShellExecute Application.hwnd, "Open", ruta, _ vbNullString, _ vbNullString, _ SW_SHOWNORMAL r.Offset(0, 3) = "Ejecutado" End If Case Is = "TXT" If Time >= CDate(r.Offset(0, 1)) And r.Offset(0, 3) <> "Ejecutado" And Date = CDate(r) Then ShellExecute Application.hwnd, "Open", ruta, _ vbNullString, _ vbNullString, _ SW_SHOWNORMAL r.Offset(0, 3) = "Ejecutado" End If End Select Next Set r = Nothing Sheets("TAREAS").Range("g1") = Time If Time >= "10:30:00" Then cancela_tareas ' apaga el cronometro a las 10:30 por si se teo olvida cancelar el cronometro End Sub Sub tareas() EarlTime = Now + TimeSerial(0, 1, 0) Application.OnTime EarlTime, "tareas" abrir End Sub Sub cancela_tareas() On Error Resume Next Application.OnTime EarlTime, "tareas", , False End Sub Ahora debes dar doble click al objeto "ThisWorkbook" y en al ventana que se te abrió pegas esto: Private Sub Workbook_BeforeClose(Cancel As Boolean) 'detiene cronometro tareas programadas cancela_tareas End Sub Grabas el libro y ya. Ahora tienes 3 nuevas macros: - Tareas - Abrir - cancela_tareas La primera inicia un "cronometro" utilizando el método on time de excel La segunda evalúa las entradas ingresadas en la hoja TAREA esto lo realiza barriendo el rango de col A y cotejando la fecha y hora más el estado de col D El intervalo de barrido es cada 1 minuto, no amerita creo hacerlo cada segundo. Si deseas modificar el intervalo debes modificar la linea EarlTime = Now + TimeSerial(0, 1, 0) En donde los números entre paréntesis son hh, mm, ss El ultimo macro, coo su nomber lo dice, cancela o detiene el cronometro Bien. Cuando el cronometro encuentra una fecha y hora idéntica o superior ( en hora) a la de sistema en el momento del barrido, ejecutara la apertura del archivo "correctamente" indicado en la columna de ruta, siempre y cuando en la correspondiente celda de columna D este vacía o tenga algún valor distinto de la cadena "Ejecutado". Cada vez que abra un archivo marcara esa linea con esa cadena, para no volver a abrirlo en el siguiente barrido. Bueno, eso es todo. Así como esta el macro, puedes programar aperturas de archivos xls, doc, txt. Bye