我有一个带有一行代码的.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版本不编译某些代码?
答案 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