Cerrar archivo

Hola buen día, espero que me puedas ayudar con el siguiente tema, tengo un archivo en excel, al ejecutar una macro el me genera un informe el cual se guarda automáticamente dependiendo del contenido en 2 celdas, hasta el momento funciona muy bien, pero cuando el usuario desea generar el mismo informe si el primer archivo que genero no lo ha cerrado me genera un problema y se frena toda la macro.lo que deseo es que al momento de empezar la macro, el verifique que le archivo no este abierto, si lo esta que lo cierre y prosiga con el resto de la macro, o si no esta abierto que siga ejecutando la macro.

1 respuesta

Respuesta
1
Agrega ésta línea a tu código existente
If EstaEnUsoElLibro("Respaldo.xls") Then Workbooks("Respaldo.xls").Close SaveChanges:=True
Function EstaEnUsoElLibro(ByVal sNombreDelLibro As String) As Boolean
On Error GoTo Err_EstaEnUsoElLibro
    Dim LibroExcel As Workbook
    EstaEnUsoElLibro = False
    For Each LibroExcel In Workbooks
        If Trim(UCase(LibroExcel.Name)) = UCase(sNombreDelLibro) Then
            EstaEnUsoElLibro = True
            MensajeDeError = ""
            Exit For
        End If
    Next
Exit_EstaEnUsoElLibro:
   Exit Function
Err_EstaEnUsoElLibro:
   Resume Exit_EstaEnUsoElLibro
End Function
Buen día, agradezco mucho tu ayuda, añadí al código de la macro el código que me enviaste, pero no funciona, me surgen varias dudas, 1-"respaldo.xls" que archivo es este o es el nombre del archivo donde se encuentra la macro, 2- ¿Cuándo dices sNombreDelLibro este debe ser el nombre del nuevo libro que genero la macro? Si es así, como hago puesto que el nombre del archivo que genera la macro cambia dependiendo el contenido de la celda A22
Ok, Mira a tu código le debes añadir sólo la línea
If EstaEnUsoElLibro("Respaldo.xls") Then Workbooks("Respaldo.xls").Close SaveChanges:=True
Donde "Respaldo.xls" sería un ejemplo del nombre de archivo que buscamos. En tu caso lo debes sustituir por lo que tienes en la celda A22, asegurate que en esa celda incluyas junto con el nombre del archivo su extensión.
El siguiente código es la función que te permite saber si el archivo esta en uso o no este código lo debes poner fuera de la macro
Function EstaEnUsoElLibro(ByVal sNombreDelLibro As String) As Boolean 
On Error GoTo Err_EstaEnUsoElLibro 
    Dim LibroExcel As Workbook 
    EstaEnUsoElLibro = False 
    For Each LibroExcel In Workbooks 
        If Trim(UCase(LibroExcel.Name)) = UCase(sNombreDelLibro) Then 
            EstaEnUsoElLibro = True 
            MensajeDeError = "" 
            Exit For 
        End If 
    Next 
Exit_EstaEnUsoElLibro: 
   Exit Function 
Err_EstaEnUsoElLibro: 
   Resume Exit_EstaEnUsoElLibro 
End Function
Ojala y ahora si te funcione
oye que pena contigo, no soy muy experto, cuando me dices que ponerlo fuera de la macro, en que parte lo coloco?? y me dices que añada la linea :If EstaEnUsoElLibro("Respaldo.xls") Then Workbooks("Respaldo.xls").Close SaveChanges:=True, como pretendo que sea automatico quedaria asi? If EstaEnUsoElLibro(range(a22)) Then Workbooks(range(a22)).Close SaveChanges:=True, porque lo intento y no me funciona, me arroja error en range(a22).
Ok, Mira reemplaza la línea
If EstaEnUsoElLibro(range(a22)) Then Workbooks(range(a22)).Close
por
If EstaEnUsoElLibro(range("a22")) Then Workbooks(range("a22")).Close
Faltan las comillas
Y cuando me refiero a que lo demás lo pongas fuera, me refiero a que después de la línea End Sub de tu macro pongas el siguiente código:
Function EstaEnUsoElLibro(ByVal sNombreDelLibro As String) As Boolean  
On Error GoTo Err_EstaEnUsoElLibro  
    Dim LibroExcel As Workbook  
    EstaEnUsoElLibro = False  
    For Each LibroExcel In Workbooks  
        If Trim(UCase(LibroExcel.Name)) = UCase(sNombreDelLibro) Then  
            EstaEnUsoElLibro = True  
            MensajeDeError = ""  
            Exit For  
        End If  
    Next  
Exit_EstaEnUsoElLibro:  
   Exit Function  
Err_EstaEnUsoElLibro:  
   Resume Exit_EstaEnUsoElLibro  
End Function
Mira la ultima, parece ser que no pude, realizo todo como me lo dices, activo la macro inicialmente y funciona, pero si el archivo que genera la macro esta abierto me arroja el siguiente error: se ha producido el error"13" en tiempo de ejecución: no coinciden los tipos, le doy depurar y me señala el error en Workbooks(Range("a22")).Close
Es porque le falta algo a esa línea
Haz lo siguiente:
Cambia la lìnea Workbooks(Range("a22")). Close por Workbooks(Range("a22"). Value). Close
Me comentas que aconteció.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas