1

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 メカニズムを使用せずに、私がやろうとしていることを達成する方法はありますか?

4

1 に答える 1

1

2007 年以降に開発/デバッグした後、これを変更します。

Sub FillShape(oShp as Shape)

これに:

Sub FillShape(oShp as Object)

コンパイラはオブジェクトが持つプロパティと持たないプロパティを認識していないため、もはや吠えることはありません。もちろん、2003 が理解できないフープを押し通そうとしたり、エラーをトラップしたりしないようにするのは、あなた次第です。

于 2013-08-12T15:04:47.363 に答える