sha*_*esh 20
打开Access数据库,您将看到表,查询,报告,模块和宏.
它包含可用于在序列中调用常见MS-Access操作的宏.
对于自定义VBA宏,请按ALT + F11.
您可以尝试以下VBA代码直接导出宏内容,而不首先将它们转换为VBA.与表,表单,报表和模块不同,宏位于名为Scripts的容器中.但它们在那里,可以使用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
Run Code Online (Sandbox Code Playgroud)
另一个使用的对象如下:
For Each obj In Access.Application.CurrentProject.AllMacros
Access.Application.SaveAsText acMacro, obj.Name, strFilePath & "\Macro_" & obj.Name & ".txt"
Next
Run Code Online (Sandbox Code Playgroud)
编辑:根据Michael Dillon的回答,SaveAsText确实将命令保存在宏中,而无需转换为VBA.我不知道当我测试它时发生了什么,但它在结果文件中没有产生有用的文本.
所以,我今天学到了新东西!
ORIGINAL POST:为了扩展这个问题,我想知道是否有办法从代码中检索宏的内容,而且似乎没有(至少在A2003中没有,这就是我正在运行的).
有两个集合,您可以通过它们访问存储的宏:
CurrentDB.Containers("Scripts").Documents
CurrentProject.AllMacros
Run Code Online (Sandbox Code Playgroud)
Intellisense为两个集合标识的属性相当不同,因为集合具有不同的类型.第一种(即传统的,前A2000方式)是通过文档集合,并且所有文档的方法/属性/成员是相同的,即不是特定于宏.
同样,CurrentProject的All ...集合返回集合,其中各个项目的类型为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
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用生成的文本文件来完成您需要做的任何事情.
请注意,这必须在Access中以交互方式运行,因为它使用DoCmd.RunCommand,并且您必须为每个宏单击"确定" - 对于具有大量宏的数据库来说很乏味,但对于普通应用程序来说不是太繁重,这应该不具备超过少数几个宏.