2017-08-17 2 views
2

L'une des nouvelles fonctionnalités que MS a introduit à MS Word depuis Word 2010 est LayoutColumns FootnoteOptions. Par conséquent la ligne de code suivante compile dans Word 2016: ActiveDocument.Range.FootnoteOptions.LayoutColumns mais pas dans Word 2010 (je n'ai pas testé dans Word 2013).VBA compile dans Word 2016 mais pas Word 2010

Les déclarations du compilateur conditionnel ne semblent pas aider ... il n'y a rien pour la version d'application sauf VBA7 qui comprend Word 2010.

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

Donc, ce ne sera pas compilé dans 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

semble être "Bureau 2013 et plus tard" https://msdn.microsoft.com/en-gb/library/microsoft.office.interop.word.footnoteoptions.layoutcolumns.aspx – Slai

Répondre

4

Les directives de compilation ne vous aidera pas. Vous devez déterminer la version et utiliser la liaison tardive pour les appels de membres qui ne se trouvent pas dans les anciennes versions de 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

Ah ... c'est mieux que ce que je viens de noyer – SlowLearner

0

Pas aussi bon que la réponse de ThunderFrame parce que je pense qu'il est probablement plus efficace de définir une plage comme un objet que l'ensemble de l'application, mais ici va:

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

Je suis un peu en retard, mais peu d'alternatives contraignantes plus tardives:

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

un peu plus court et plus lent:

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

ou:

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

Cool, merci de jeter un oeil à ceux-ci aussi - bon d'avoir des options! – SlowLearner

+1

De quel «CObj» parlez-vous? 'VBA.CVar (ActiveDocument.Range.FootnoteOptions) .LayoutColumns = 3' fonctionne en 2013. – ThunderFrame

+0

Merci @ThunderFrame. Je ne savais pas si VBA avait 'CObj' comme VB.Net, et cette page semblait suggérer que c'est http://www.functionx.com/vbaexcel/functions/builtin.htm – Slai