python - VBA 中的表达式语句

标签 python vba language-theory

我最近正在尝试编写一个 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 方法。 (NameWorksheet 的一个属性。)因此,错误消息在您知道发生了什么情况后就更有意义了。

要了解更多相关信息,您可以在这里看到:

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/

相关文章:

python - xml.sax 解析器和行号等

python - 更改 Mac OS 下除终端以外的应用程序的 Python 路径

python - 在同一行打印新输出

excel - 有没有办法在打开具有相似文件名的 Excel 文件时自动运行宏?

excel - 不使用循环更改单元格范围的内部颜色

scheme - CPS转换后的管理redex到底是什么?

python - SQLAlchemy 中的 contains_eager 和限制

compiler-construction - 有关解析器,解释器和编译器的学习资源

excel - 从另一列中查找文本并将其替换为相邻值