Excel VBA无法访问外部工作簿上的工作表

时间:2013-11-24 02:35:43

标签: excel vba function excel-vba

我使用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。

2 个答案:

答案 0 :(得分:0)

将mySub中的所有内容放入测试函数中,如果一切都成功,则测试函数返回单元格的值。所以testFunc = ws.Range(“A2”)。

答案 1 :(得分:0)

正如DaveU已经说过的,UDF只能返回值。我发现了一个不同的解决方法,只需在VBA环境中调用该函数,这样我就可以在任何地方修改单元格内容。

相关问题