2017-10-26 13 views
2

PPT 2010と2013-2016の両方で動作するPPTマクロを作成しようとしています。 2010年のモデルでは使用しない2013-16オブジェクトモデル(ActivateChartDataWindow)に1つのオブジェクトがあります。私は、アプリケーションのバージョンをテストするには、このようなコードを使用して考えると、正しいオブジェクトを使用します。オブジェクトモデルのVBAテスト

With theChart.ChartData 
    If CInt(Application.Version) >= 15 Then 
     .ActivateChartDataWindow 
    Else 
     .Activate 
    End If 
.... 
End With 

問題が.ActivateChartDataWindowオブジェクトが見つからないので、これは2010年にコンパイルされませんです。したがって、実行時エラーは発生しませんが、コンパイル時エラーが発生します。

これを行うにはどうすればよいですか?コード自体でコンパイル時のチェックを無効にする方法はありますか?

答えて

2

早送りのメンバーコールをしています。コードに以前のバージョンのタイプライブラリを使用してコンパイルできないメンバ呼び出しが含まれている場合、解決方法は実行時にのみバインドされる遅延呼び出しに切り替えることです(つまり、コンパイル時検証)。

ので、代わりのWith theChart.ChartDataは、あなたがObject変数を宣言し、SetそれtheChart.ChartDataへ:

Dim lateBoundChartData As Object 
Set lateBoundChartData = theChart.ChartData 

そして今、そのlateBoundChartDataに対して行われたすべてのメンバーの呼び出しは実行時にのみ有効となります - タイプミスに気を付けますOption Explicitここにお手伝いできません!あなたはObjectに対して書き込み何かが常に遅延バインディングになるだろう:

With lateBoundChartData 
    If CInt(Application.Version) >= 15 Then 
     'no intellisense & compile-time validation here 
     .ActivateChartDataWindow 
    Else 
     'no intellisense & compile-time validation here 
     .Activate 
    End If 
End With 

面白いことは、人々がさえ実現することなく、遅延バインディングコードのすべての時間を書くということです。

+0

素晴らしいアイデアは、動作します..ありがとう!! – dashnick

関連する問題