質問

私はWord-VBAを利用するアクセスVBAアプリケーションを持っています。ローカルマシン上のアプリケーションを実行している間、それはうまく機能します。それが他のものに移動されると(同じバージョンのアクセスと単語)それはそれが単語のVBA部分になるとクラッシュします。document.openまたは.saveas2のようなコマンドは失敗します:Method 'SaveAs2' of object failed

アプリケーションで参照されているライブラリは、他のエンドユーザーに必要なライブラリが必要です。私はライブラリと一緒にコンパイルしていて、それらが常に.exe / etcに常に含まれていますが、あなたがアプリケーションを他のコンピュータに移動したときにそれが常に再コンパイルしようとしているときにそれはそうされるようです。

私はVBAに精通していないので、私の失敗した単語VBA関数は、参照エラーのために、他のアイデアのために推測されていますか?

役に立ちましたか?

解決

VBAを参照できる「ライブラリ」は実際に comオブジェクト、通常DLLファイルとしてパッケージ化されています。 。それらは、要求されたときに実行時に動的にインスタンス化されているオブジェクトです。それらはメモリにWindowsによってロードされ、プログラムはCOM規格を使用してそれらと対話し、メソッドを呼び出し、プロパティの取得または設定プロパティ(プロセス間通信)を使用します。それらと相互作用する2つの方法が一般的にあります:早期結合および後期結合。

早期バインドを使用すると、まだコードを書いている間にライブラリへの参照を追加します。これにより、VBA IDEは自動補完とコンパイル時エラーチェックを提供できます。オブジェクトを "new"キーワードでインスタンス化し、オブジェクト名を直接入力します。ただし、早期バインドには、特定のDLLとおそらく特定のバージョンのインターフェイスを選択する必要があります。ユーザーのうちの1つがない特定のインタフェースバージョンを参照している場合、これは問題につながる可能性があります。

遅延なしで、CreateObjectまたはGetObjectを使用してオブジェクトをインスタンス化し、Windowsから名前で要求します。 Windowsはhref="http://msdn.microsoft.com/jp/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx" REL="nofollow">名前を調べる< / a>とオブジェクトへの参照を返します。コード内の変数は単にオブジェクトと呼び出しメソッドであり、コンパイラでは必要なメソッド名を入力し、コンパイル時の警告を提供することを可能にするために少し危険です。これには、確立された方法を呼び出している限り、新しい、または廃止予定されていない限り、コードはユーザーのバージョンに関係なく機能します。

あなたが取得しているエラーは、ユーザーマシンのバージョンをチェックしたい場合があります - SaveAS2 がオフィス2010に追加されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top