我试图从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
我将代码保存为插件并尝试添加新选项卡和按钮,但未成功.所以我把代码带回了工作簿.当我试图再次运行它时,我得到一个未定义的变量ppAlignCenter
.有谁知道为什么会发生这种情况或是否是常见错误?
这是一个PowerPoint常量,我正在使用后期绑定.但它完成了无数次.
那你就没有迟到了.
把自己放在VBA的鞋子里:你正在编译那个项目,而你却是ppAlignCenter
一个令牌/标识符.如果Option Explicit
打开(它应该!),并且没有引用PowerPoint对象库,那么它ppAlignCenter
是一个未声明的变量,你不知道该怎么做 - 所以你把手放在空中并尖叫着用户:
编译错误:未定义变量.
如果Option Explicit
未打开,并且未引用PowerPoint,则您Variant
在现场"声明"一个未初始化的变量,命名为ppAlignCenter
,以便MyTextBox.ParagraphFormat.Alignment
可以编译赋值.
因为变量没有被初始化,所以在运行时它的值只是0
- 并且从那里不清楚会发生什么,因为PpParagraphAlignment没有值为的成员0
,所以MyTextBox.ParagraphFormat.Alignment
分配也可能引发运行时错误,但那是完全取决于Alignment
房产的实施.
现在,如果PowerPoint演示库被引用(早期绑定),然后ppAlignCenter
解析为PpParagraphAlignment.ppAlignCenter
您知道枚举值实际上只是一个2
,所以你可以继续进行编译.
该PpParagraphAlignment
枚举中的PowerPoint类型库中定义的,所以如果你是后期绑定到库中,你不能按名称引用它的成员,因为VBA将尝试在编译时来解决这些问题-并没有这样做.
所以不是这样的:
.ParagraphFormat.Alignment = ppAlignCenter
你需要这样做:
.ParagraphFormat.Alignment = 2 'ppAlignCenter
但是为什么你会迟到绑定到一个类型库,你知道你需要让程序甚至希望在运行时工作?
后期绑定意味着您正在使用Object
变量而不是特定类型 - 这意味着运行时接口查找和您根本不需要的相当多的开销......如果库不是,那么这些查找将无论如何都会失败不在场.更不用说,编程Object
意味着你没有获得IntelliSense并且需要对你正在做的所有事情进行四重检查,因为编译器不会帮助你,如果你输入错误,运行时会尖叫.
... ...说早期引用是特定于版本的 - 所以如果你将代码分发给运行你引用的库的不同版本的用户,后期绑定将确保一切适用于每个人(假设您的代码不是不使用特定于版本的API功能.在这种情况下,最好的折衷办法是制定与早期绑定引用(所以你得到智能感知和自动完成!),然后在切换一切后期绑定,当您分发.