Cerrar Libro Activo mediante UserForm

Tengo un userform que se carga al abrir un libro, he asignado dentro de este userform un CommandButton para cerrar este libro, al ejecutar la macro sí se cierra el libro... El problema es que cuando existen otros libros abiertos, al abrirlo nuevamente ya no se carga automáticamente el userform. Por favor tuu ayuda con un código que cierre solo este libro y no los demás libros abiertos, además que al volver a abrirlo cargue nuevamente el formulario. Si solo hay un libro abierto (es decir el libro activo, que contiene la macro) se cierre la aplicación.

2 Respuestas

Respuesta
5

Es muy raro ya que no debiera suceder esto que comentas, salvo que te estás olvidando de cerrar también el UF.

Te dejo las instrucciones que cierran el libro activo, guardando los cambios en este caso (es opcional) y cerrando el UF:

Private Sub CommandButton1_Click()
'x Elsamatilde
'cierra el libro guardando los cambios
ActiveWorkbook.Close True
'cierra el UF
Unload Me 
End Sub

Sdos y si esto resuelve tu consulta no olvides valorarla.

Gracias Elsa por la respuesta, en efecto se cierra el libro, pero permanece la aplicación abierta y debo cerrarlo haciendo clic en la X ubicada en la esquina superior derecha. Lo que quería es que, si solo este libro está abierto se cierre también la aplicación, caso contrario se cierre solo este libro y no la aplicación, y se mantengan los demás libros abiertos. ¿Cómo podría lograr esto?

Leyendo el tema de tu consulta: 'Cerrar libro activo...' y luego tu problema de que al volverlo a abrir ya no se abre el UF ... mi código resuelve esos temas.

Ahora, si además debe controlar si existen otros libros abiertos para cerrar o no la aplicación, debes agregarle el resto del código, quedándote así:

Private Sub CommandButton1_Click()
'x Elsamatilde
Dim i As Byte
'evalúa si hay otros libros abiertos
For Each wb In Workbooks
If wb.Name <> ActiveWorkbook.Name And UCase(Left(wb.Name, 8)) <> "PERSONAL" Then i = 1
Next
'cierra el libro activo guardando los cambios (opcional)
ActiveWorkbook.Close True
'cierra el UF
Unload Me
'si no hay otros libros cierra la aplicación
If i = 0 Then Application.Quit
End Sub

Sdos!

Mejor utilizá este código:

Private Sub CommandButton1_Click()
'x Elsamatilde
'evalúa si hay otros libros abiertos
For Each wb In Workbooks
If wb.Name <> ActiveWorkbook.Name And UCase(Left(wb.Name, 8)) <> "PERSONAL" Then i = 1
Next
'cierra el UF
Unload Me
'si es el único abierto cierra la aplicación
If i = 0 Then
    'guarda el libro
    ActiveWorkbook.Save
    ActiveWorkbook.Application.Quit
Else
    ActiveWorkbook.Close True '(guardado opcional)
End If
End Sub

Sdos!

Respuesta

Gracias, me ayudo mucho tu solución.

Saludos!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas