2012-05-13 15 views
0

私は、オートメーションの目的で、2007 Powerpointファイルのオブジェクトにオブジェクト名を割り当てました。私はオフィス2003を持っている別のマシンで自動コードを実行し、オブジェクト名が動的に変化しているので、自動コードがエラーをスローします。Office 2007と2003の間のオブジェクト名が変更されました

VBAを使用してそのマシンでオブジェクトの名前を再度変更しようとしましたが、デバッグ中に動作します。しかし、私は自動化コードを再実行するとエラーがスローされます。

2つのバージョン間の互換性の問題ですか?できるだけ早く手伝ってください。

のWordのdifferentversionsと私の問題だったおかげ

答えて

1

。一般に、PowerPointの最高バージョンのコードは、以前のバージョンではサポートされていない可能性があります。コードが動作することもありますが、それが尊重する方法が問題を引き起こす可能性があります。

私は一例で問題に

改正を解決するために(オブジェクトとして...)遅延バインディング使用することをお勧めします。

違いは、実行時にコード内のオブジェクトライブラリを結合することです。ツール参照は使用しません。そのようなもの:

Sub ppt() 

    Dim olApp As Object 

    Set olApp = CreateObject("PowerPoint.Application") 

End Sub 
+0

など、あなたが機能のスライドを渡すことができるように、オブジェクトではなく、スライドのように宣言マスターズ、レイアウトされましたか?それについての参考になると助かります。また、メソッドはコードが確実に動作するようにしますか? –

+0

私は自分の答えを編集しましたが、その違いはオブジェクト(CreateObject( "PowerPoint.Application") の作成です) –

0

「オブジェクト名」とは、シェイプ名を意味しますか?つまり、シェイプの.Nameプロパティですか?これはバグのようです。

作業に必要な図形にタグを使用することを検討してください。例えば、労働安全衛生のあなた形状への参照を想定し、代わりに=のようなものか、「私を忘れないでください」oSh.Nameを使用して:あなたは形状への参照を取得する必要がある場合

oSh.Tags.Add "ShapeName","RememberMe" 

はその後、関数を使用します以下のような:

Function ShapeNamed(oSl as Object, sName as string) as Shape 
    Dim oSh as Shape 
    For Each oSh in oSl.Shapes 
    If oSh.Tags("ShapeName") = sName Then 
     Set ShapeNamed = oSh 
     Exit Function 
    End If 
    Next 
End Function 

OSLは、あなたが言及した遅延バインディング概念で私を助けてもらえ

関連する問題