para - ejecutar macro automaticamente al abrir excel
Excel VBA Abrir el libro de trabajo, realizar acciones, guardar como, cerrar (2)
Esta pregunta ha sido editada debido a los extensos comentarios y actualizaciones de las respuestas propuestas.
Como se solicita aquí, está el módulo 13;
Sub SaveInFormat()
Application.DisplayAlerts = False
Workbooks.Application.ActiveWorkbook.SaveAs Filename:="C:/Documents and Settings/jammil/Desktop/AutoFinance/ProjectControl/Data/" & Format(Date, "yyyymm") & "DB" & ".xlsx", leFormat:=51
Application.DisplayAlerts = True
End Sub
También hay problemas con el manejo de errores, sé que me he equivocado con él, pero estoy más interesado en arreglar la función de cierre en el momento antes de entrar en ella. Aquí está el código de manejo de errores que necesita un poco de trabajo
Sub test()
Dim wk As String, yr As String, fname As String, fpath As String
Dim owb As Workbook
wk = ComboBox1.Value
yr = ComboBox2.Value
fname = yr & "W" & wk
fpath = "C:/Documents and Settings/jammil/Desktop/AutoFinance/ProjectControl/Data"
owb = Application.Workbooks.Open(fpath & "/" & fname)
On Error GoTo ErrorHandler:
ErrorHandler:
If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then Exit Sub Else Call Clear
''Do Some Stuff
Call Module13.SaveInFormat
owb.Close
este es su código de prueba más mi cambio de la ruta y el nombre del archivo
Después de la discusión publicando la respuesta actualizada:
Option Explicit
Sub test()
Dim wk As String, yr As String
Dim fname As String, fpath As String
Dim owb As Workbook
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
End With
wk = ComboBox1.Value
yr = ComboBox2.Value
fname = yr & "W" & wk
fpath = "C:/Documents and Settings/jammil/Desktop/AutoFinance/ProjectControl/Data"
On Error GoTo ErrorHandler
Set owb = Application.Workbooks.Open(fpath & "/" & fname)
''Do Some Stuff
With owb
.SaveAs fpath & Format(Date, "yyyymm") & "DB" & ".xlsx", 51
.Close
End With
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
End With
Exit Sub
ErrorHandler: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then
Else: Call Clear
End Sub
Manejo de errores:
Podría intentar algo como esto para detectar un error específico:
On Error Resume Next
Set owb = Application.Workbooks.Open(fpath & "/" & fname)
If Err.Number = 1004 Then
GoTo FileNotFound
Else
End If
...
Exit Sub
FileNotFound: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then
Else: Call Clear
Trataré de responder varias cosas diferentes, sin embargo, es posible que mi contribución no cubra todas sus preguntas. Tal vez varios de nosotros podemos tomar diferentes partes de esto. Sin embargo, esta información debería ser útil para usted. Aquí vamos..
Abrir un archivo separado:
ChDir "[Path here]" ''get into the right folder here
Workbooks.Open Filename:= "[Path here]" ''include the filename in this path
''copy data into current workbook or whatever you want here
ActiveWindow.Close ''closes out the file
Apertura de un archivo con fecha especificada si existe:
No estoy seguro de cómo buscar en su directorio para ver si existe un archivo, pero en mi caso no me molestaría en buscarlo, solo trataría de abrirlo y poner a prueba algún error para que, si no lo hace ''t exist entonces mostrar este mensaje o hacer xyz.
Algunas declaraciones de comprobación de errores comunes:
On Error Resume Next ''if error occurs continues on to the next line (ignores it)
ChDir "[Path here]"
Workbooks.Open Filename:= "[Path here]" ''try to open file here
O (mejor opción):
si no existe, muestre un cuadro de mensaje o un cuadro de diálogo para decir "el archivo no existe, ¿le gustaría crear uno nuevo?
lo más probable es que desee utilizar el GoTo ErrorHandler
muestra a continuación para lograr esto
On Error GoTo ErrorHandler:
ChDir "[Path here]"
Workbooks.Open Filename:= "[Path here]" ''try to open file here
ErrorHandler:
''Display error message or any code you want to run on error here
Mucha más información sobre el manejo de errores aquí: http://www.cpearson.com/excel/errorhandling.htm
Además, si desea obtener más información o necesita saber más en general en VBA, recomendaría el sitio de Siddharth Rout, tiene muchos tutoriales y códigos de ejemplo aquí: http://www.siddharthrout.com/vb-dot-net-and- sobresalir/
¡Espero que esto ayude!
El ejemplo sobre cómo asegurar el código de error no se ejecuta TODAS LAS veces:
Si depura a través del código sin la Exit Sub
ANTES del manejador de errores, pronto se dará cuenta de que el controlador de errores se ejecutará cada vez que ocurra, si hay un error o no. El enlace debajo del código muestra una respuesta previa a esta pregunta.
Sub Macro
On Error GoTo ErrorHandler:
ChDir "[Path here]"
Workbooks.Open Filename:= "[Path here]" ''try to open file here
Exit Sub ''Code will exit BEFORE ErrorHandler if everything goes smoothly
''Otherwise, on error, ErrorHandler will be run
ErrorHandler:
''Display error message or any code you want to run on error here
End Sub
Además, mira esta otra pregunta en la que necesitas más referencia sobre cómo funciona esto: el bloque goto no funciona VBA