【发布时间】:2018-05-24 22:52:43
【问题描述】:
首先:我使用的是 Excel 2007,但代码也必须适用于 Excel 2003。
我的问题如下:我需要访问不同工作簿中的单元格,该工作簿可能已关闭。以下代码随处可见:
Function Foo()
Dim cell As Range
Dim wbk As Workbook
Set wbk = Workbooks.Open("correct absolute path")
' wbk is Nothing here so the next statement fails.
Set cell = wbk.Worksheets("Sheet1").Range("A1")
Foo = cell.Value
wbk.Close
End Function
遗憾的是,在 open 语句之后 wbk 什么都没有(我很乐意提供更好的错误消息,但不知道该怎么做;我会为真正的 IDE 和有用的语言提供什么:/) .绝对路径正确,指向有效的excel xlsx文件。
我还假设最好的方法是“缓存”工作簿而不是每次调用函数时都打开/关闭它?任何可能的问题(除了必须处理工作簿显然已经打开的情况)?
单步执行时的图像:
【问题讨论】:
-
您没有收到任何错误消息,
Open语句只返回 Nothing?我已尝试重现您的问题,但没有成功。你将不得不给我们更多的细节和背景。 -
@Jean-FrançoisCorbett 说“不”错误信息就是说,excel 只是继续执行。我看了一点,但找不到任何
GetLastError()或类似的,On Error Goto没有指定任何异常对象?引用的东西基本上是整个函数,但我把它改成了完整的函数,也许有帮助。 -
"? Err.Number" 和 "? Err.Description" 在即时窗口中将为您提供有关运行时错误的信息。您需要为 On Error Goto 提供错误处理程序。当您说“下一条语句失败”时,您的意思是您在那里遇到运行时错误吗?如果是这样,是什么?如果不是,那么 Cell 是否也等于无?您是否尝试过使用非常简单的路径,例如指向“我的文档”中的文件?
-
@DougGlancy 我在生成的 excel 单元格中得到一个
#VALUE!,一旦它尝试执行该行,执行就会停止(但这是意料之中的,我基本上是在尝试取消引用 null那里的指针)。是的,我已经尝试过D:\test.xlsx(所以权利肯定没有问题,也不会变得更简单)和我的用户文件夹。什么是即时窗口?我将“?Err.Description”作为监视表达式,但这显然不是您的意思,只是告诉我这是一个包含“?Err.Description”的字符串。 -
好吧,我只是在 Open() 语句之后放了一个
MsgBox Err.Description,遗憾的是它是空的,Err.Number是 0..