我使用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。
答案 0 :(得分:0)
将mySub中的所有内容放入测试函数中,如果一切都成功,则测试函数返回单元格的值。所以testFunc = ws.Range(“A2”)。
答案 1 :(得分:0)
正如DaveU已经说过的,UDF只能返回值。我发现了一个不同的解决方法,只需在VBA环境中调用该函数,这样我就可以在任何地方修改单元格内容。