variables未定义的错误谜
我正试图从Excel自动化PowerPoint。 一切正常。 我有以下代码块完美工作:
Set MyTextbox = mySlide.Shapes.AddTextbox(1, Left:=myShape.Left - 3, Top:=42, Width:=myShape.Width + 6, Height:=10).TextFrame.TextRange With MyTextbox .Text = Format(MyShapeDate, "m/yy") .Font.Size = 11 .ParagraphFormat.Alignment = ppAlignCenter .Font.Bold = True End With
我将代码保存为插件,并尝试添加新的选项卡和button,但未成功。 所以我把代码带回工作簿。 当我试图再次运行它时,我得到一个未定义为ppAlignCenter
的variables。 有人会知道为什么会发生这种情况,或者这是一个常见的错误?
这是一个PowerPoint常数,我正在使用后期绑定。 但它工作完美无数次。
那么你没有迟到的约束力。
把自己放在VBA的鞋子里:你正在编译这个项目,你会遇到ppAlignCenter
作为令牌/标识符。 如果Option Explicit
被打开(它应该 !),而PowerPoint对象库没有被引用,那么ppAlignCenter
是一个未声明的variables,你不知道该怎么做 – 所以你把手放在空中在用户尖叫:
编译错误:variables未定义。
如果没有打开Option Explicit
,并且未引用PowerPoint,则您现场声明一个未初始化的Variant
variables,名为ppAlignCenter
,以便可以编译MyTextBox.ParagraphFormat.Alignment
的赋值。
因为variables没有被初始化,所以在运行时它的值只会是0
– 从那里不清楚会发生什么,因为PpParagraphAlignment没有值为0
成员,所以有可能是MyTextBox.ParagraphFormat.Alignment
赋值运行时错误,但这完全取决于Alignment
属性的实现。
现在,如果PowerPoint库被引用(早期绑定),那么ppAlignCenter
将parsing为您知道的PpParagraphAlignment.ppAlignCenter
枚举值实际上只是一个2
,因此您可以继续编译。
PpParagraphAlignment
枚举是在PowerPointtypes库中定义的,所以如果你是迟到的绑定到这个库,你不能通过名字来引用它的成员,因为VBA将在编译时试图解决它们 – 而不能这样做。
所以,而不是这个:
.ParagraphFormat.Alignment = ppAlignCenter
你需要这样做:
.ParagraphFormat.Alignment = 2 'ppAlignCenter
但是,为什么你会迟到一个types库,你知道你需要有一个程序,甚至希望在运行时工作?
后期绑定意味着你正在使用Object
variables而不是特定types – 这意味着运行时接口查找和相当多的开销,你根本不需要 ……而且这些查找将会失败,如果库不存在。 更不用说,对Object
编程意味着你不会得到IntelliSense,并且需要对所做的所有事情进行四重检查,因为编译器不会帮助你,而且如果你犯了一个错误,运行时会尖叫。
…说,早期绑定的引用是特定于版本的 – 所以如果你将代码分发给运行不同版本库的用户,那么迟绑定将确保所有人都能正常工作(假如你的代码不是不使用特定于版本的APIfunction)。 在这种情况下,最好的折衷办法是使用早期绑定的引用进行开发 (因此您可以获得智能感知和自动完成!),然后在分发时将所有内容切换到迟到的范围。