Подтвердить что ты не робот

Как вы просматриваете макрокоманду в доступе?

У меня есть база данных Microsoft Access, и там есть макрос. Как просмотреть код макроса?

4b9b3361

Ответ 1

Откройте базу данных Access, вы увидите таблицу, запрос, отчет, модуль и макрос.
Он содержит макросы, которые могут использоваться для вызова общих действий MS-Access в последовательности.

Для настраиваемого макроса VBA нажмите ALT + F11.

Ответ 2

Вы можете попробовать следующий код VBA для экспорта содержимого макроса напрямую, не преобразовывая их сначала в VBA. В отличие от таблиц, форм, отчетов и модулей макросы находятся в контейнере под названием "Скрипты". Но они есть и могут быть экспортированы и импортированы с помощью SaveAsText и LoadFromText

Option Compare Database

Option Explicit

Public Sub ExportDatabaseObjects()
On Error GoTo Err_ExportDatabaseObjects

    Dim db As Database
    Dim d As Document
    Dim c As Container
    Dim sExportLocation As String

    Set db = CurrentDb()

    sExportLocation = "C:\SomeFolder\"
    Set c = db.Containers("Scripts")
    For Each d In c.Documents
        Application.SaveAsText acMacro, d.Name, sExportLocation & "Macro_" & d.Name & ".txt"
    Next d

Альтернативный объект для использования выглядит следующим образом:

  For Each obj In Access.Application.CurrentProject.AllMacros
    Access.Application.SaveAsText acMacro, obj.Name, strFilePath & "\Macro_" & obj.Name & ".txt"
  Next

Ответ 3

EDIT: По словам Майкла Диллона, SaveAsText сохраняет команды в макросе, не переходя в VBA. Я не знаю, что произошло, когда я протестировал это, но в полученном файле не появился полезный текст.

Итак, сегодня я узнал что-то новое!

ОРИГИНАЛЬНАЯ ПОЧТА: Чтобы развернуть вопрос, я задавался вопросом, есть ли способ получить содержимое макроса из кода, и не кажется, что есть (по крайней мере, нет в A2003, это то, что я запускаю).

Есть две коллекции, через которые вы можете получить доступ к сохраненным макросам:

  CurrentDB.Containers("Scripts").Documents
  CurrentProject.AllMacros

Свойства, которые Intellisense идентифицирует для двух коллекций, довольно различны, потому что коллекции имеют разные типы. Первый (т.е. Традиционный, pre-A2000 способ) осуществляется через коллекцию документов, а методы/свойства/члены всех документов одинаковы, то есть не специфичны для макросов.

Аналогично, коллекции All... коллекции CurrentProject возвращают коллекции, где отдельные элементы имеют тип Access Object. В результате Intellisense предоставляет вам методы/свойства/члены, которые могут не существовать для конкретного документа/объекта.

Насколько я могу судить, нет возможности программно извлекать содержимое макроса.

Это будет разумно, поскольку макросы не очень полезны для всех, у кого будет возможность писать код для их программного анализа.

Но если вы просто хотите оценить, что делают макросы, одной из альтернатив было бы преобразование их в VBA, что может быть сделано программно таким образом:

  Dim varItem As Variant
  Dim strMacroName As String

  For Each varItem In CurrentProject.AllMacros
    strMacroName = varItem.Name
    'Debug.Print strMacroName
    DoCmd.SelectObject acMacro, strMacroName, True
    DoCmd.RunCommand acCmdConvertMacrosToVisualBasic
    Application.SaveAsText acModule, "Converted Macro- " & strMacroName, _
      CurrentProject.Path & "\" & "Converted Macro- " & strMacroName & ".txt"
  Next varItem

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

Обратите внимание, что это нужно запускать интерактивно в Access, потому что оно использует DoCmd.RunCommand, и вам нужно щелкнуть OK для каждого макросложного для баз данных с большим количеством макросов, но не слишком обременительным для обычного приложения, которое должно У меня больше нескольких макросов.

Ответ 4

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

Function utlFindQueryInMacro
       ( strMacroNameLike As String
       , strQueryName As String
       ) As String 
    ' (c) 2012 Doug Den Hoed 
    ' NOTE: requires reference to Microsoft Scripting Library
    Dim varItem As Variant
    Dim strMacroName As String
    Dim oFSO As New FileSystemObject
    Dim oFS   
    Dim strFileContents As String
    Dim strMacroNames As String
    For Each varItem In CurrentProject.AllMacros
    strMacroName = varItem.Name
    If Len(strMacroName) = 0 _
    Or InStr(strMacroName, strMacroNameLike) > 0 Then
        'Debug.Print "*** MACRO *** "; strMacroName
        Application.SaveAsText acMacro, strMacroName, "c:\temp.txt"
        Set oFS = oFSO.OpenTextFile("c:\temp.txt")
        strFileContents = ""
        Do Until oFS.AtEndOfStream
            strFileContents = strFileContents & oFS.ReadLine
        Loop
        Set oFS = Nothing
        Set oFSO = Nothing
        Kill "c:\temp.txt"
        'Debug.Print strFileContents
        If InStr(strFileContents, strQueryName)     0 Then
            strMacroNames = strMacroNames & strMacroName & ", "
        End If
    End If
    Next varItem
    MsgBox strMacroNames
    utlFindQueryInMacro = strMacroNames
 End Function

Ответ 5

Ответ от User2666082 верный! Он открывает окно создания макроса, но вам не нужно его создавать. Справа вы видите "Каталог действий", а в разделе "В этой базе данных" вы можете найти все ваши макросы в вашей базе данных.

Вы можете редактировать их оттуда, дважды щелкнув по макросу.

Ответ 6

В Access 2010 перейдите на вкладку "Создать" на ленте. Нажмите "Макро". Панель "Каталог действий" должна появиться в правой части экрана. Под ним есть раздел под названием "В этой базе данных". Нажатие на одно из имен макросов должно отображать его код.