2017-08-17 59 views
2

MS从Word 2010引入MS Word的新功能之一是LayoutColumns FootnoteOptions。VBA在Word 2016中编译但不是Word 2010

所以下面的代码行编译在Word 2016年ActiveDocument.Range.FootnoteOptions.LayoutColumns但不是在Word 2010中(我不是在Word 2013测试)。

的条件编译语句似乎并没有帮助...有没有什么好说的应用程序版本,除了VBA7包括Word 2010

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

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

Sub testWd10() 
#If Win64 And VBA7 Then 
    ActiveDocument.Range.FootnoteOptions.LayoutColumns 
#End If 
End Sub 

Compiler error - Method or data member not found

+0

似乎是 “办公室2013年和后来的” https://msdn.microsoft.com/en-gb/library/microsoft.office.interop.word.footnoteoptions.layoutcolumns.aspx – Slai

回答

4

编译器指令不会帮你。您需要确定版本,并对不在旧版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 
+0

啊...这比我刚刚脱掉的部分更好 – SlowLearner

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 
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 
+0

很酷,谢谢你也会看看那些 - 很好的选择! – SlowLearner

+1

你说的这个'CObj'是什么? 'VBA.CVar(ActiveDocument.Range.FootnoteOptions).LayoutColumns = 3' 2013年的作品。 – ThunderFrame

+0

谢谢@ThunderFrame。不确定VBA是否具有'CObj'作为VB.Net,并且这个页面似乎暗示它可以提供http://www.functionx.com/vbaexcel/functions/builtin.htm – Slai