Word VBA中的条件机制

时间:2013-11-12 14:16:49

标签: vba ms-word word-vba extensibility

我有一个带有一行代码的.dot文件,当且仅当安装了Word 2003或更高版本时,必须在Microsoft Word宏中执行,否则会被忽略。我试图像这样实现它,希望Visual Basic for Word只在需要执行它时编译一行。有问题的代码如下(Word 2003是11.0)

If Val(Application.Version) >= 11 Then
    ActiveWindow.View.ReadingLayout = False
End If

我仍然希望带有宏的.dot文件可用于早期版本的Microsoft Word,例如Microsoft Word 2000.

但是,如果我尝试运行.dot文件,它会因为编译错误而在Word 2000上失败,因为ActiveWindow.View.ReadingLayout不是Word 2000中的有效方法。也就是说,即使该行永远不会被执行在Word 2000上因为Application.Value将是9.0,Word仍然会尝试编译该行。

在Visual Basic for Word中是否有任何方法可以添加编译器指令,以便根据Word版本不编译某些代码?

3 个答案:

答案 0 :(得分:1)

我们最终使用后期绑定来实现它,结果证明这是一个非常小的调整:

If Val(Application.Version) >= 11 Then
    Dim obj As Object
    Set obj = GetObject(, "Word.Application")
    obj.ActiveWindow.View.ReadingLayout = False
End If

答案 1 :(得分:0)

他们是两个让它运作起来的技巧:

1) 为仅在特定办公室版本中起作用的函数添加模块,并将子例程添加到其中。

2) 在必须调用函数的地方,为特定的Office版本添加测试,然后使用Application.Run

调用子例程

原始模块将具有:

If Val(Application.Version) >= 11 Then
    Application.Run "office11module.disableReadingLayout"
End If

您的特定模块office11module将具有

Public Sub disableReadingLayout()
    ActiveWindow.View.ReadingLayout = False
End Sub

这是有效的,因为Word在需要之前没有编译office11module,我们通过Application.Run调用确保Word在运行之前不知道我们需要它。

答案 2 :(得分:-1)

我们的Word VBA产品需要数字签名。

我们利用MS Office 2000作为基础开发应用程序,以便与我们的一些客户尽可能向后兼容。

在Windows XP开发平台上使用Word 2000时,我们使用了jonas_jonas(1月16日和14日,17:59)提供的解决方案多年。

然而 - 升级到Windows 7 Pro开发平台后,该解决方案不再有效,让我们“#cod; Disk full"尝试在对Word文件进行数字签名后保存Word文件时出错。

然后我们尝试并成功使用了Pep(1月18日和14日23:23)提供的答案(上面),当您需要对Word文件进行数字签名时 正常工作< / EM>

我们认为&#34;磁盘满了#34;错误是在保存之前尝试编译项目的结果。

If Val(Application.Version) >= 11 Then
    Dim obj As Object
    Set obj = GetObject(, "Word.Application")
    obj.ActiveWindow.View.ReadingLayout = False
End If