La empresa de Richard, como muchas otras, usa bastante Excel. De hecho, tienen miles y miles de libros de Excel que han recopilado a lo largo de los años. Richard necesita una forma de averiguar cuáles de esos libros de trabajo tienen macros VBA, sin la necesidad de abrir e inspeccionar cada libro de trabajo individualmente. Se pregunta si hay una manera fácil de hacer esto.

Una forma bastante simplista de encontrar todos sus libros de trabajo que contienen macros es simplemente buscar cualquier archivo que use las extensiones XLSM o XLSB.

Los libros de trabajo que contienen macros deben almacenarse en archivos con estas extensiones. Si bien no es 100% infalible, es un buen lugar para comenzar.

También puede utilizar las capacidades de búsqueda de Windows (fuera de Excel)

y busque cualquier archivo que contenga el texto «End Sub» o «End Function». Eso identificará rápidamente cualquier libro de trabajo candidato potencial, ya que cualquier procedimiento de VBA debe usar una de estas dos declaraciones al final.

Si está utilizando libros de trabajo heredados (aquellos desarrollados con el formato de archivo de Excel 2003), entonces realmente necesita mirar dentro de cada uno de los libros de trabajo. Esto se puede hacer mediante programación, lo que significa que podría tener una macro que abra cada libro de trabajo en una carpeta y lo examine para ver si hay macros dentro de él.

Por ejemplo, puede crear una macro que recorra cada uno de los archivos de un directorio y determine si el archivo es un libro de Excel. Luego puede abrir el archivo y verificar si tiene un proyecto VBA dentro de él.

Sub FindMacros()

Dim sPath As String     Dim sFile As String     Dim sFoundFiles As String

'specify directory to use - must end in "\"

sPath = "C:\MyData\Excel Data\"



sFile = Dir(sPath)

Do While sFile <> ""

If InStr(sFile, ".xls") > 0 Then             Workbooks.Open (sPath & sFile)

If Workbooks(sFile).HasVBProject Then                 sFoundFiles = sFoundFiles & sFile & vbCrLf             End If             Workbooks(sFile).Close (False)

End If         sFile = Dir     ' Get next filename     Loop     If Len(sFoundFiles) = 0 Then         MsgBox "No workbooks found that contain macros"

Else         sFoundFiles = "The following workbooks contain macros:" & _           vbCrLf & vbCrLf & sFoundFiles         MsgBox sFoundFiles     End If End Sub

Este ejemplo utiliza la propiedad HasVBProject (introducida en el modelo de objetos de Excel en Excel 2007) para determinar si el archivo tiene macros o no. Cuando se completa, la macro muestra un cuadro de mensaje que enumera las hojas de trabajo que contienen macros.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (12466) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.

Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Finding_Workbooks_Containing_Macros [Encontrar libros de trabajo que contienen macros].