Компания Ричарда, как и многие другие, довольно часто использует Excel. Фактически, у них есть тысячи и тысячи книг Excel, которые они собрали за долгие годы. Ричарду нужен способ узнать, в каких из этих книг есть макросы VBA, без необходимости открывать и проверять каждую книгу по отдельности. Он задается вопросом, есть ли простой способ сделать это.

Один довольно упрощенный способ найти все ваши книги, содержащие макросы, — просто поискать любые файлы, которые используют расширения XLSM или XLSB.

Книги, содержащие макросы, должны храниться в файлах с этими расширениями. Хотя это не стопроцентная защита от ошибок, это хорошее место для начала.

Вы также можете использовать возможности поиска Windows (за пределами Excel)

и найдите любой файл, содержащий текст «End Sub» или «End Function». Это позволит быстро определить любые потенциальные рабочие книги-кандидаты, поскольку любая процедура VBA должна использовать в конце один из этих двух операторов.

Если вы используете устаревшие книги (разработанные с использованием файлового формата Excel 2003), вам действительно нужно заглянуть внутрь каждой книги. Это можно сделать программно, то есть у вас может быть макрос, который открывает каждую книгу в папке и проверяет ее на предмет наличия в ней каких-либо макросов.

В качестве примера вы можете создать макрос, который проходит по каждому из файлов в каталоге и определяет, является ли файл книгой Excel. Затем он может открыть файл и проверить, есть ли в нем проект VBA.

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

В этом примере используется свойство HasVBProject (представленное в объектной модели Excel в Excel 2007), чтобы определить, есть ли в файле какие-либо макросы или нет. По завершении макрос отображает окно сообщения, в котором перечислены те рабочие листы, которые содержат макросы.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (12466) применим к Microsoft Excel 2007, 2010, 2013 и 2016.

Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Finding_Workbooks_Contain_Macros [Поиск книг, содержащих макросы].