J'essaye d'écrire un seul module de code qui fonctionnera avec PowerPoint 2003 et toutes les versions plus récentes en relation avec les changements de modèle de couleur qui ont été introduits avec 2007 (thème par rapport au schéma dans le modèle d'objet VBA) mais ce problème peut augmenter avec les modifications du modèle objet. PowerPoint inclut la méthode Application.Version pour vérifier quelle version de PowerPoint est utilisée au moment de l'exécution mais n'inclut pas de constante de compilateur équivalente pouvant être utilisée lors de la compilation avec les instructions #If ... #Then.Code VBA conditionnel pour la compatibilité des modèles d'objet PowerPoint 2003 et 2007/2010/2013
Dans l'exemple ci-dessous, la deuxième partie de la déclaration Si jetteront une erreur de compilation dans PowerPoint 2003 parce que la méthode ObjectThemeColor (et constante msoThemeColorDark1) n'existe pas dans cette version du modèle objet VBA:
Option Explicit
Public Enum PPTversion
PPT2003 = 11
PPT2007 = 12
PPT2010 = 14
PPT2013 = 15
End Enum
Sub FillShape(oShp as Shape)
If Int(Application.Version) = 11 Then
' Use the old colour model
oShp.Fill.ForeColor.SchemeColor = ppForeground
Else
' Use the new colour model
' causes a compiler error "Method or data member not found" when run in 2003
oShp.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
End If
End Sub
Il est possible d'obtenir une partie de la voie à une solution en utilisant la constante du compilateur VBA7 (qui détecte efficacement PowerPoint 2010 et ci-dessus), mais cela laisse 2007 portés disparus:
Option Explicit
Public Enum PPTversion
PPT2003 = 11
PPT2007 = 12
PPT2010 = 14
PPT2013 = 15
End Enum
Sub FillShape(oShp as Shape)
If Int(Application.Version) = 11 Then
' Use the old colour model
oShp.Fill.ForeColor.SchemeColor = ppForeground
Else
' Use the new colour model
#If VBA7 Then
oShp.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
#End If
End If
End Sub
y at-il un moyen d'atteindre ce J'essaie faire sans utiliser le mécanisme #Const ce qui signifierait maintenir plusieurs versions du projet?