从电子表格调用另一个工作簿中的 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 函数的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中