2007 で導入されたカラー モデルの変更 (VBA オブジェクト モデルのテーマとスキーム) に関連して、PowerPoint 2003 およびそれ以降のすべてのバージョンで動作する単一のコード モジュールを作成しようとしていますが、この問題はどのオブジェクト モデルでも発生する可能性があります。変化します。
PowerPoint には、実行時に使用されている PowerPoint のバージョンを確認する Application.Version メソッドが含まれていますが、コンパイル時に #If... #Then ステートメントで使用できる同等のコンパイラ定数は含まれていません。
次の例では、If ステートメントの 2 番目の部分が PowerPoint 2003 でコンパイラ エラーをスローします。これは、ObjectThemeColor メソッド (および msoThemeColorDark1 定数) がそのバージョンの 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
VBA7 コンパイラ定数 (PowerPoint 2010 以降を効果的に検出する) を使用して解決策の一部を得ることができますが、これにより 2007 が不明のままになります。
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
プロジェクトの複数のバージョンを維持することを意味する #Const メカニズムを使用せずに、私がやろうとしていることを達成する方法はありますか?