当前位置:  开发笔记 > 编程语言 > 正文

变量未定义的错误Enigma

如何解决《变量未定义的错误Enigma》经验,为你挑选了1个好方法。

我试图从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.有谁知道为什么会发生这种情况或是否是常见错误?



1> Mathieu Guin..:

这是一个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功能.在这种情况下,最好的折衷办法是制定与早期绑定引用(所以你得到智能感知和自动完成!),然后在切换一切后期绑定,当您分发.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有