问题
如何访问另一个Excel工作簿中定义的公共常量?
设置
workbook.xls中
我的VBA代码在名为“MyWorkbook.xls”的当前Excel工作簿中运行。 它有一些VBA代码,它从单元格“A1”读取文件名 - “在这种情况下为OtherWorkbook.xls。”然后,代码应该读取在该其他工作簿中定义的常量并将其写入单元格“A2”这是我的代码:
Sub GetValueFromOtherWorkbook()
otherWorkbook = Range("A1").Value ' Value = "OtherWorkbook.xls"
Dim returnedValue As String
' Idea 1: Doesn't work
Set returnedValue = OtherWorkbook.xls!Module1.MY_CONSTANT
' Idea 2: Doesn't work either
Set returnedValue = Application.Run(otherWorkbook & "!Module1.MY_CONSTANT")
Range("A2").Value = returnedValue ' MY_CONSTANT = "testValue"
End Sub
OtherWorkbook.xls
如上所述,第二个Excel工作簿称为“OtherWorkbook.xls”。 它有一个名为Module1的VBA模块。 Module1定义了一个公共常量。代码如下所示:
Public Const MY_CONSTANT As String = "testValue"
问题
MyWorkbook.xls中的代码未运行,它返回以下错误
运行时错误'424'
需要对象
即使在阅读帮助文档后,我也不太清楚如何处理它。在另一个上下文中,我设法使用以下代码调用另一个工作簿中的例程:
otherWorkbookName = "OtherWorkbook.xls"
Application.Run (otherWorkbookName & "!Module1.SomeRoutine")
因此,调用例程可以正常工作,但访问公共常量则不行。
我接下来会尝试什么想法?
答案 0 :(得分:2)
代码模块不是可以像工作表一样访问的对象。
您可以访问和操作它,但为了做到这一点,您需要引用Microsoft Visual Basic for Applications Extensibility
库并允许访问VBA项目(工具 - 选项 - 安全 - 宏安全 - 受信任的发布者 - 信任访问权限VBA项目),之后您可以使用第二个工作簿的Workbook.VBProject
属性。
您不需要这样做。相反,您可以创建对其他工作簿的引用:在VBA IDE中,转到工具 - 引用,单击Browse
并使用常量找到工作簿。
如果这不好,你可以在该工作簿中创建一个只返回常量值的方法,并按照你所演示的那样调用它。