从电子表格调用另一个工作簿中的 VBA 函数

Posted

技术标签:

【中文标题】从电子表格调用另一个工作簿中的 VBA 函数【英文标题】:Call VBA function in another workbook from spreadsheet 【发布时间】:2014-10-10 22:27:05 【问题描述】:

这是函数定义:

Public Function StockQuote(strSymbol As String) As Double 

它存储在已加载工作表的模块中(“My Macros.xlsm”,在我的启动文件夹中)。

我想从另一个工作簿中调用它,作为单元格引用:

Workbook1.xlsm 单元格 A1:

=StockQuote("AAPL")

但我得到的只是名称错误。

【问题讨论】:

我认为您需要对其进行限定,例如=[My Macros.xlsm]StockQuote("AAPL") 或类似的东西。玩一分钟。 (我目前在没有 MS Office 的 PC 上,否则我会尝试确认正确的公式结构) 这个问题已经asked and answered before 不正确,Brian Camire。您链接到的问题和答案是指从 VBA 发出的调用;我正在尝试从电子表格本身进行调用。这个问题与这个问题无关,因为这两个界面使用完全不同的语言。 除了@BrianCamire 的评论,您还可以check this out 添加引用后,可以像调用工作表函数一样调用VBA函数。 【参考方案1】:

=My Macros.xlsm!StockQuote("AAPL")

='C:\SomeFolder\My Macros.xlsm'!StockQuote("AAPL")

工作。

但为了工作,您应该在 Workbook1.xlsm 之后从 Workbook1.xlsm 的 excel 窗口打开 My Macros.xlsm 工作簿

【讨论】:

有效,而且先打开哪个工作簿似乎并不重要。【参考方案2】:

尝试将包含函数的 XLSM 工作簿保存为 XLAM:当 XLAM 打开时,其他工作簿应该能够看到您的 UDF。

【讨论】:

【参考方案3】:

这样的事情怎么样。

它应该在激活工作表时运行,并将函数的返回值放在单元格 A1 中。

Private Sub Worksheet_Activate()
    Range("A1") = StockQuote("AAPL")
End Sub

如果当前工作表看不到您的函数,您可能需要对其进行不同的结构

【讨论】:

当然,但那是非常不同的。例如,如果不进入 VBA 编辑器(或创建某种更新触发器),我就无法更新它。而且我不能随便在单元格中添加此功能 - 我必须每次都对单元格位置进行编码。

以上是关于从电子表格调用另一个工作簿中的 VBA 函数的主要内容,如果未能解决你的问题,请参考以下文章

python 从Excel工作簿中的所有电子表格创建CSV

如何在工作表中调用 VBA 函数?

Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中

Excel VBA 宏将复制一系列单元格并粘贴到另一个工作簿中

根据两个工作簿中的 Excel 值发送电子邮件提醒

EXCEL 的自定义 VBA 函数中的用户定义警告