Как искать через файлы кода VBA

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

Я написал все хранимые процессы в SQL и использовал инструмент поиска и не нашел того, что искал, поэтому мне интересно, расположен ли нужный мне процесс в одной из многих используемых баз данных Access. С SQL Server было легко написать приложение на C # для сценариев проков, чтобы я мог их искать, но в Access это выглядит так, будто я ограничен открытием каждой БД по отдельности для поиска в файлах кода.

Есть ли способ программно искать файлы кода VBA?

 Fionnuala12 апр. 2012 г., 23:52
Вотstackoverflow.com/questions/626642/… и здесьwiki.lessthandot.com/index.php/… Вы найдете примечания по поисковому коду, в том числе во всех базах данных в папке. Такжеstackoverflow.com/questions/9612675/…
 Tim Williams12 апр. 2012 г., 17:13
Не знаю, если в Acess то же самое, но вот как я это сделал в Excel:cpearson.com/Excel/vbe.aspx
 Brandon Moore12 апр. 2012 г., 21:35
@ ja72 Если эта надстройка будет работать для Access, или если я смогу изменить ее для этого, я дам вам двойную привет-пять, если мы когда-нибудь встретимся.
 ja7212 апр. 2012 г., 21:12
Посмотрите этот проект CodeProject для идей -codeproject.com/Articles/18029/SourceTools-xla, Посмотрите через функцию сохранения проекта и как они анализируют все исходные файлы из проекта vba.

Ответы на вопрос(3)

Лучше всего скачать бесплатноMZ-Tools для VBA и использовать их функцию поиска / замены.

Start Find Find Results

Edit

MZ-Tools для VBA больше не доступен. Платная версия работает с более новыми офисными установками.

 Brandon Moore12 апр. 2012 г., 21:27
MZ-Tools - отличная надстройка, и я использовал ее все время, когда занимался разработкой VB6, но HansUp прав, что я ищу решение, которое не требует от меня открытия отдельных файлов.
Решение Вопроса

вы можете использовать объектную модель VBE. Этот пример ищет слово во всех модуляхActiveVBProject текущей базы данных. Если база данных включает более одного VBProject, вы можете перечислить коллекцию VBProjects и искать проекты по одному по имени:

For Each objComponent In Application.VBE.VBProjects(ProjName).VBComponents

Или, если вы предпочитаете ссылаться на проект по номеру, а не по имени, просто помните, что нумерация начинается с 1, а не с 0.

Public Sub findWordInModules(ByVal pSearchWord As String)
    'Dim objComponent As VBComponent
    ' VBComponent requires reference to Microsoft Visual Basic
    ' for Applications Extensibility; use late binding instead:
    Dim objComponent As Object
    Dim strMessage As String
    Dim strModuleList As String

    strModuleList = vbNullString
    For Each objComponent In Application.VBE.ActiveVBProject.VBComponents
        If objComponent.CodeModule.Find(pSearchWord, 1, 1, -1, -1) = True Then
            strModuleList = strModuleList & "; " & objComponent.Name
        End If
    Next objComponent
    strMessage = "Text '" & pSearchWord & "' found in "
    If Len(strModuleList) > 0 Then
        strMessage = strMessage & "modules: " & Mid(strModuleList, 3)
    Else
        strMessage = strMessage & "no modules"
    End If
    Debug.Print strMessage
End Sub

Для этого просмотрите раздел справки AccessFind Способ; Вы можете предпочесть другие варианты, чем я использовал.

Если вы хотите настроить таргетинг на несколько файлов БД и выполнить поиск модулей в каждом, вы можете автоматизировать это, используяOpenDatabase метод. Я оставлю детали этой части на ваше усмотрение.

 13 апр. 2012 г., 05:55
+1 красиво сделано.
 Brandon Moore12 апр. 2012 г., 21:29
Я предполагаю, что мог бы также использовать объектную модель VBE, чтобы просто читать каждую строку каждого модуля и записывать их в текстовый файл, верно? Это было бы идеально, так что я мог бы использовать инструмент поиска текста, который я использовал, вместо того, чтобы пытаться создать свой собственный.
 13 апр. 2012 г., 03:07
Да, это возможно. Но вы можете использовать Application.SaveAsText, чтобы сохранить каждый модуль в виде текстового файла - это должно потребовать меньше усилий для написания кода.

не упомянутый ранее, - это просто распечатать код проекта из контекстного меню в редакторе VBA. Приведенные ниже шаги могут быть изменены в соответствии с доступными приложениями, но результат остается тем же - текст с возможностью поиска.

В редакторе VBA щелкните правой кнопкой мыши имя проекта и выберите команду «Печать» в появившемся контекстном меню. Убедитесь, что & quot; Код & quot; отмечен и нажмите кнопку «ОК». Принтер можно заменить в разделе «Настройка ...». меню, доступное в последнем диалоге.

Right Click "Print" Check Box "Code"

Напомним, что автономные модули, SQL, таблицы и т. Д. Доступны для печати в разделе «Документация по базам данных» в разделе «Анализировать»; группа из «ИНСТРУМЕНТОВ БАЗЫ ДАННЫХ» Вкладка.

Очень полезен для сортировки и выделения базовых SQL запросов Access.

Database Documenter

Ваш ответ на вопрос