【发布时间】:2013-10-26 00:54:41
【问题描述】:
我是 VBA 新手,我正在尝试编写一个可以从 Excel 单元格调用的函数,它可以打开一个已关闭的工作簿,查找一个单元格值并返回它。
到目前为止,我知道如何编写这样的宏:
Sub OpenWorkbook()
Dim path As String
path = "C:\Users\UserName\Desktop\TestSample.xlsx"
Dim currentWb As Workbook
Set currentWb = ThisWorkbook
currentWb.Sheets("Sheet1").Range("A1") = OpenWorkbookToPullData(path, "B2")
End Sub
Function OpenWorkbookToPullData(path, cell)
Dim openWb As Workbook
Set openWb = Workbooks.Open(path, , True)
Dim openWs As Worksheet
Set openWs = openWb.Sheets("Sheet1")
OpenWorkbookToPullData = openWs.Range(cell)
openWb.Close (False)
End Function
宏 OpenWorkbook() 运行良好,但是当我尝试直接从 Excel 单元格调用 OpenWorkbookToPullData(...) 时,它不起作用。声明:
Set openWb = Workbooks.Open(path, , True)
不返回任何内容。
有谁知道如何将其转换为可以从 Excel 单元格调用的有效 VBA 函数?
【问题讨论】:
-
感谢您的帮助。 @pnuts我的问题不是一般如何编写VBA函数,而是在这里更具体。 OpenWorkbookToPullData(...) 确实被调用了,我可以介入。但问题出在 Workbooks.Open(...) 执行的那一行,它返回为 Nothing。调用 OpenWorkbookToPullData(...) 的子 OpenWorkbook() 工作正常。
-
感谢@PortlandRunner 但是,从宏子 OpenWorkbook() 工作正常的意义上说,函数本身“工作”。问题不在于那里的语法。问题是,如果您从 Excel 单元格调用 OpenWorkbookToPullData(...),Workbooks.Open(...) 行将返回 Nothing。如果它是从子例程中调用的,它可以正常工作。
-
@PortlandRunner 不幸的是没有。即使通过 Excel 调用,字符串“path”也会正确传递到函数中。问题是方法调用 Workbooks.Open(...) 无论是从子例程还是从 Excel 单元格调用,其行为都不同。在前一种情况下,它可以工作。在后者中,它返回 Nothing。