我最近正在尝试编写一个 Excel 宏,并且需要确定特定工作表是否存在。我选择的脚本编写武器是 Python,但我的 VBA 技能确实很差。因此,以良好的 Pythonic 风格,我采用了“请求宽恕比请求更容易”的方法,并编写了如下内容:
Debug.Print MyWorkbook.Worksheets(TabName).Name ''Check for an index error
If Err.Number <> 0 Then
''Code to add the sheet to the workbook
这非常有效,直到我尝试消除 print 语句。我将第一行更改为:
MyWorkbook.Worksheets(TabName).Name
突然间我开始收到“对象不支持此属性或方法”错误。作为一名 Python 程序员,这让我感到惊讶,我一直在 Python 中做类似的事情。
我很好奇,所以我读了一点书。我能够在 Python 中找到有关上述表达式语句的文档,但在 VBA 中却找不到。 VBA 中是否根本不允许表达式语句?如果是这样,有没有理由不这样做?有谁知道我可以在哪里阅读此内容?
最佳答案
简短的回答是“不”。 VBA自始至终都是必不可少的。一般来说,表达式不是合法的独立语句。您会注意到许多表达式甚至无法“编译”:
'Won't "compile"
(42+99)
在您的具体示例中,还发生了更多事情。 VBA 按照您的预期方式将此行上的 MyWorkbook.Worksheets(TabName).Name
视为返回值的表达式:
'Fine: gets value of `Name` property
Debug.Print MyWorkbook.Worksheets(TabName).Name
VBA 在这一行看到相同的代码:
'Error: tries to call `Name` as method
MyWorkbook.Worksheets(TabName).Name
尝试调用工作表对象上的(不存在的)Name
方法。 (Name
是 Worksheet
的一个属性。)因此,错误消息在您知道发生了什么情况后就更有意义了。
要了解更多相关信息,您可以在这里看到:
https://stackoverflow.com/a/1545024/58845
那里有一个 VBA 语言规范的链接,它可能更准确地涵盖了这类事情,尽管我没有检查:
http://msdn.microsoft.com/en-us/library/dd361851%28PROT.10%29.aspx
关于python - VBA 中的表达式语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202415/