VBA在Word 2016中编译,但不在Word 2010中编译

时间:2017-08-17 00:59:35

标签: vba ms-word word-vba

MS自Word 2010以来向MS Word引入的一项新功能是LayoutColumns FootnoteOptions。

因此,以下代码行在Word 2016中编译:{{1​​}}但不在Word 2010中(我未在Word 2013中测试过)

条件编译器语句似乎没有帮助......除了包含Word 2010的VBA7之外,应用程序版本没有任何内容。

https://msdn.microsoft.com/VBA/Language-Reference-VBA/articles/compiler-constants

所以这不会在Word 2010中编译:

ActiveDocument.Range.FootnoteOptions.LayoutColumns

Compiler error - Method or data member not found

3 个答案:

答案 0 :(得分:5)

编译器指令不会对您有所帮助。您需要确定版本,并对旧版Word中的成员调用使用后期绑定。

Sub testWd10()
  If Application.Version > 15 Then 'e.g. 15 is Word 2013, change as necessary
      Dim myRange As Object 'As Range
      Set myRange = ActiveDocument.Range
      myRange.FootnoteOptions.LayoutColumns 'Late-bound call
  End If
End Sub

答案 1 :(得分:3)

我有点晚了,但是后期绑定替代方案还有一些:

Dim o As Object
Set o = ActiveDocument.Range.FootnoteOptions
On Error Resume Next
o.LayoutColumns = 3
On Error GoTo 0

有点短而慢:

On Error Resume Next
CallByName ActiveDocument.Range.FootnoteOptions, "LayoutColumns", vbSet, 3
On Error GoTo 0

或:

On Error Resume Next
CVar(ActiveDocument.Range.FootnoteOptions).LayoutColumns = 3
On Error GoTo 0

答案 2 :(得分:0)

不如ThunderFrame的答案好,因为我认为将范围设置为对象可能比整个应用程序更有效,但是这里有:

Sub testWd10()
    Dim wdApp As Object
    Set wdApp = Application

    If wdApp.Version > 14 Then
        wdApp.Documents(ActiveDocument.FullName).Range.FootnoteOptions.LayoutColumns
    End If
End Sub