【发布时间】:2015-02-25 02:59:51
【问题描述】:
我使用 VBA 在 Excel 中创建了一个自定义函数。我正在尝试使用 Workbooks.Open(path) 命令从不同的工作簿中获取数据。这是我的代码:
Option Explicit
Function TestFunction() As String
mySub
TestFunction = "Success."
End Function
Sub mySub()
Dim path As String
Dim wk As Workbook
path = "C:\Users\jg\Desktop\machine_data.xlsm"
Set wk = Workbooks.Open(path)
Dim ws As Worksheet
Set ws = wk.Sheets(1)
Debug.Print ws.Range("A2")
End Sub
Sub Test()
Debug.Print (TestFunction())
End Sub
现在我的问题如下:
当我在 Excel 的 VBA 环境中运行 Sub Test() 时,一切都按计划进行。 machine_data.xlsm 被打开,A2 字段出现在调试中。
一旦我转到定义此模块的工作簿并在单元格中输入=TestFunction(),我会得到一个#VALUE!。文件也打不开。
如果我评论这两行:
Set ws = wk.Sheets(1)
Debug.Print ws.Range("A2")
单元格将显示Success!,但文件仍未打开。
我做错了什么?两个工作簿都是.xlsm 文件。我正在使用 Microsoft Office Excel 2007。
【问题讨论】:
-
UDF 只能返回一个值 - 请查看 This。
-
@DaveU 我已经读过这个是的,但是是不是打开一个外部工作簿并且只从它读取并且取决于读取值返回一个不同的值允许?因为这似乎是不可能的。我不会更改
machine_data.xlsm文件中的任何值。 -
@DaveU 没关系我选择了不同的解决方法(请参阅下面我自己的答案)