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,则您现场声明一个未初始化的Variantvariables,名为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库,你知道你需要有一个程序,甚至希望在运行时工作?

后期绑定意味着你正在使用Objectvariables而不是特定types – 这意味着运行时接口查找和相当多的开销,你根本不需要 ……而且这些查找将会失败,如果库不存在。 更不用说,对Object编程意味着你不会得到IntelliSense,并且需要对所做的所有事情进行四重检查,因为编译器不会帮助你,而且如果你犯了一个错误,运行时会尖叫。

…说,早期绑定的引用是特定于版本的 – 所以如果你将代码分发给运行不同版本库的用户,那么迟绑定将确保所有人都能正常工作(假如你的代码不是不使用特定于版本的APIfunction)。 在这种情况下,最好的折衷办法是使用早期绑定的引用进行开发 (因此您可以获得智能感知和自动完成!),然后在分发时将所有内容切换到迟到的范围。