第一:我使用的是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
Run Code Online (Sandbox Code Playgroud)
遗憾的是,wbk在公开声明之后是没有的(我很乐意提供更好的错误信息,但不知道我是怎么做的;我为真正的IDE和有用的语言提供了什么:/).绝对路径是正确的,并指向有效的excel xlsx文件.
另外我假设最好的方法是"缓存"工作簿,而不是每次调用函数时都打开/关闭它?任何可能的问题(除了必须处理工作簿已经打开的情况)?
单步执行时的图像:

我可以重现这个问题.当我尝试将此代码粘贴到用户定义的函数中时,它才会发生在我身上.
我相信这是设计的(引用是针对XL 2003的,但XL 2010上的情况也是如此)
在自定义函数中使用VBA关键字
可以在自定义函数中使用的VBA关键字数小于可以在宏中使用的数字.除了将值返回到工作表中的公式或另一个VBA宏或函数中使用的表达式之外,不允许自定义函数执行任何操作.例如,自定义函数无法调整窗口大小,编辑单元格中的公式或更改单元格中文本的字体,颜色或图案选项.如果在函数过程中包含此类"动作"代码,则该函数返回#VALUE!错误.
http://office.microsoft.com/en-us/excel-help/creating-custom-functions-HA001111701.aspx
我发现的唯一解决方法是通过普通的宏调用这种代码.类似于选择要应用它的单元格,然后循环选择等.
| 归档时间: |
|
| 查看次数: |
22347 次 |
| 最近记录: |