【发布时间】:2015-07-31 21:57:36
【问题描述】:
有没有办法通过 VBA 确定 Access 表是否包含数据宏?我的大部分表都有数据宏,但如果遇到没有它的表,我的代码会失败。
我没有收到错误消息。相反,代码继续运行,就好像它处于无限循环中,但我必须强制 Access 退出才能逃脱。
具体来说,我正在尝试保存我的所有表格和数据宏,以便以后可以使用(未记录的)LoadFromText 函数重新创建它们。
我在下面的代码示例中用 ** BUG ** 突出显示了问题。
For Each td In db.TableDefs
If Left(td.Name, 4) <> "MSys" Then
'Save the table as a text file.
DoCmd.TransferText acExportDelim, , td.Name, sExportLocation & "Table_" & td.Name & ".txt", True
'Save the table's data macro as an XML file.
'** BUG **: If a table doesn't have a data macro, Access freezes/starts infinite loop.
Application.SaveAsText acTableDataMacro, td.Name, sExportLocation & "Table_" & td.Name & "_DataMacro.xml"
End If
Next td
我假设我想要某种嵌套的 If 语句,它首先检查表中是否存在数据宏。不过我不知道该怎么写。
感谢指出 SaveAsText 和 LoadFromText 函数 in another SO post 的人们。这些功能似乎有很大的潜力。
【问题讨论】:
-
如果我在没有 DataMacros 的表上执行 SaveAsText(),我会收到运行时错误“2950”,“保留错误”。代码 sn-p 显然不完整,因为它没有所有变量声明等。也许您的错误处理设置不正确/最佳。我建议添加一个显式的“On Error Goto 0”并从从立即窗口执行的单个子过程中运行代码。
-
值得注意的是,我正在使用带有 VBA 7.1 和 MS Office Pro 2016 的 MS Office Pro Plus 2013 运行 Access。
标签: ms-access vba ms-access-data-macro