Respondiendo a mi lector
@dicto (quien realizara
esta consulta), veremos la forma mediante la cual nos será posible cerrar todos los libros de Excel que tengamos abiertos, exceptuando el de trabajo.
El planteamiento es muy viable y en varias ocasiones debí lidiar con este tema, ya que por cuestiones propias del proyecto, por ejemplo, no deben existir otros libros abiertos al momento de ejecutarse una determinada macro. Estos ejemplos nos servirán para saber la forma de recorrer los libros de Excel para aplicar ciertas propiedades a cada uno de ellos, automatizando una tarea que de otra forma deberíamos hacer en forma manual.
la típica ventana correspondiente a un libro abierto.
[+/-] Ver el resto / Ocultar
Conozco dos formas de recorrer los libros de Excel: 1) utilizando el objeto WorkBook de la colección WorkBooks del objeto Application y 2) contando la cantidad de libros abiertos y reconocerlos mediante su índice.
En ambos casos el libro de trabajo (aquel en cual tenemos nuestras macros) deberá quedar abierto.
Solución 1:
Sub CerrarTodosLosLibros1()
'creo la variable de objeto Workbook
Dim Wbk As Workbook
Dim Cadena As String
'recorro con For Each la coleccion de libros del
'objeto Aplicación
For Each Wbk In Application.Workbooks
'si el libro en cuestión es distinto al nuestro:
If Wbk.Name <> "cerrar_todo.xls" Then
'almaceno su nombre
Cadena = Cadena & "-->" & Wbk.Name & vbCrLf
'y lo cierro, sin guardar los cambios
Wbk.Close xlDoNotSaveChanges
End If
Next Wbk
'si hay algo guardado en Cadena lo muestro.
'caso contrario, aviso que no habia libros abiertos
If Cadena <> "" Then
MsgBox "Se han cerrado los libros: " & Cadena, vbInformation
Else
MsgBox "No se han encontrado otros libros abiertos", vbInformation
End If
'destruyo el objeto para liberar recursos;
Set Wbk = Nothing
End Sub
Solución 2:
Sub CerrarTodosLosLibros2()
Dim Cant, X As Integer
Dim Cadena As String
'guardo la cantidad de libros abiertos:
Cant = Application.Workbooks.Count
'y con un simple bucle For los recorro:
For X = 1 To Cant
If Workbooks(X).Name <> "cerrar_todo.xls" Then
Cadena = Cadena & "-->" & Workbooks(X).Name & vbCrLf
Workbooks(X).Close xlDoNotSaveChanges
End If
Next X
If Cadena <> "" Then
MsgBox "Se han cerrado los libros: " & Cadena, vbInformation
Else
MsgBox "No se han encontrado otros libros abiertos", vbInformation
End If
End Sub
Ambos funcionan igual, pero utilizando distintos métodos. Quizás en el segundo ejemplo debamos colocar algún controlador de errores, por si el indice del libro no concuerda con el valor de X. Por eso recomiendo siempre el primero.
El lector pregunta específicamente como cerrarlos, pero podemos aplicar otros criterios: darle el mismo formato a la Hoja1 de todos los libros abiertos, cambiar sus contraseñas, guardarlos en otros directorios, enviarlos x mail, etc, etc, etc, etc y tantos etc como necesidades tengamos.
Suerte @dicto y gracias por tu mail.
agregado unos minutos después: me olvidé de mostrar alguna imagen con el resultado. perdón:
Comentarios
Publicar un comentario