Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA获取所需库引用的列表_Excel_Ms Access_Vba - Fatal编程技术网

Excel VBA获取所需库引用的列表

Excel VBA获取所需库引用的列表,excel,ms-access,vba,Excel,Ms Access,Vba,我想在Access 2010和Excel 2010中对VBA程序进行一些审核。主要关注点之一是特定程序所需的库引用。有没有一种方法可以通过编程确定特定程序需要哪些引用 我在Access中做了一个测试。我写了一些需要引用Excel库的代码。我确保没有引用并编译了代码。我没有收到任何错误。我的希望是,我将得到错误,我将能够以编程方式编译并保存所提到的缺少Excel引用的相关错误 我必须实现的另一个想法是解析每个模块中的VBA。这似乎是一项相当大的任务。“有没有办法通过编程确定特定程序需要哪些引用?”

我想在Access 2010和Excel 2010中对VBA程序进行一些审核。主要关注点之一是特定程序所需的库引用。有没有一种方法可以通过编程确定特定程序需要哪些引用

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

我必须实现的另一个想法是解析每个模块中的VBA。这似乎是一项相当大的任务。

“有没有办法通过编程确定特定程序需要哪些引用?”

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

考虑这个例子:

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

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


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

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

在每个模块的顶部都有
选项显式
,这一点很重要,包括表单、报表、用户表单、工作表等背后的代码。如果没有
选项显式
,许多未定义的符号将无法在编译时捕获

使用实际对象类型声明对象变量也很重要,而不是作为变量或对象。例如,此代码编译良好,但不会运行:

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

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

我猜访问很难准确地知道它缺少什么库,仅从代码中。可以使用VBA在项目中循环引用。以下是我测试的代码:mySum=Excel.WorksheetFunction.Sum(100200)MsgBox mySum。我也尝试了以下方法:mySum=Excel.Application.WorksheetFunction.Sum(100200)我没有收到编译错误。请参阅Tom关于
选项显式
的回答。如果您包含了该声明,但没有引用Excel,则代码会抱怨。