2017-08-17 110 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