【问题标题】:VBA to Get List of Required Library ReferencesVBA 获取所需的库参考列表
【发布时间】:2015-02-05 17:56:10
【问题描述】:

我想对 Access 2010 和 Excel 2010 中的 VBA 程序进行一些审核。主要问题之一是特定程序所需的库引用。有没有办法以编程方式确定特定程序需要哪些引用?

我在 Access 中进行了测试。我写了一些需要引用 Excel 库的代码。我确保我没有参考并编译了代码。我没有收到任何错误。我希望我会得到错误,并且我能够以编程方式编译并保存提到缺少 Excel 参考的相关错误。

我必须实现目标的另一个想法是解析每个模块中的 VBA。这似乎是一项艰巨的任务。

【问题讨论】:

  • 我猜 Access 很难仅从代码中确切知道它缺少什么库。
  • 可以使用 VBA 循环访问项目中的引用。

标签: excel ms-access vba


【解决方案1】:

“有没有办法以编程方式确定特定程序需要哪些引用?”

没有。当 Access 在您的 VBA 代码中发现它不理解的内容时,它可能会引发编译错误。但它无法确定在未引用的对象或类型库中是否有该内容。

考虑这个例子:

Dim xlApp As Excel.Application

如果您的项目包含对 Excel 对象库的引用,则该语句不会引发编译错误。但是,如果没有引用,Access 在遇到Excel.Application 时会报错“未定义用户定义的类型”。它无法告诉您“包含对 Excel 对象库的引用以解决此问题。”

当您的代码包含一个名为常量的 Excel 时,也会发生同样的情况,例如 xlEdgeTop。可以参考。如果没有引用,Access 就不会知道该名称。

顺便说一句,您为测试报告的结果是可能的,因为您的代码模块在其声明中没有包含Option Explicit。您应该始终在所有代码模块中包含Option Explicit,以便 Access 在无法识别某些内容时向您发出警告。

【讨论】:

  • 这是我测试的代码:mySum = Excel.WorksheetFunction.Sum(100, 200) MsgBox mySum.我也尝试了以下方法: mySum = Excel.Application.WorksheetFunction.Sum(100, 200) 我没有收到任何编译错误。
  • 查看 Tom 对Option Explicit 的回答。如果您包含该声明但未包含对 Excel 的引用,您的代码会报错。
【解决方案2】:

在您的情况下,我一次删除一个引用,在每次删除后进行编译。如果这对您不起作用,有几个原因:

在每个模块的顶部都有Option Explicit 很重要,包括表单、报告、用户表单、工作表等背后的代码。没有Option Explicit,许多未定义的符号将不会在编译时被捕获。

使用实际对象类型声明对象变量也很重要,而不是声明为 Variant 或 Object。例如,这段代码编译得很好,但它不会运行:

    Dim RS
    Set RS = CurrentDb.OpenRecordset("MyTable")
    If RS.EndOfFile Then MsgBox "No data"

Dim RS 更改为Dim RS As Recordset 会导致在编译时检测到不存在的.EndOfFile 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2018-04-17
    相关资源
    最近更新 更多