• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスからエクセルのプロシージャーを実行させたい)

アクセスからエクセルのプロシージャーを実行する方法

このQ&Aのポイント
  • アクセスからエクセルのプロシージャーを実行する方法を教えてください。
  • エクセル側のマクロを実行する際にマクロが使用できない可能性があります。
  • エクセルのパスを確認しても問題ない場合、オートメーション操作中にファイル名またはクラス名を見つけられませんでしたというエラーが表示される可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 ご質問を何度か読みなおしてみて、はっきりしない部分がいくつかありました。今は、回答に足るだけの情報を持ちあわせていません。 不明な点は、  ・One PC に、2つのバージョンが入っているかどうか。  ・Access 2007 から、Excel 2003 と Excel2007 を使いわけようとしているのか。  ・Access 2003 - Excel 2003 が成功して、Access 2007 - Excel 2007が不成功なのか。 どうやら、最初のOne PCに、2つのバージョンが入っているのではなさそうだ、ということだけは、検証の上分かりました。 あくまでも、オートメーションということで考えてみました。  Access 2007 - Excel 2007 ×(失敗)  Access 2003 - Excel 2003 ?(2 Versionsの中で、これは難しい)  Access 2007 - Excel 2003 ?(2 Versionsの中で、これも難しいはずです) [難しいというのは簡単ではないというだけで、可能です。しかし、そのようなことは、ほぼありえない。] PCによって違うなら、  Access 2003 - Excel 2003 ○(成功) ご質問から、以上の推論を立ててみました。 ご質問のコードは、Accessユーザー独特(MS側のサンプルがそうです)のコードのようです。 >Set xlsWB = GetObject(MyFileName) 'Excelファイル名指し これで、問題はないはずですが、私自身は、Office 2007で、このようなことはしたことがありません。このコードは、特定のインスタンスの開いていることが条件で、そのインスタンスに接続しているのですから、Excelが起動できない状態だったら、成立しません。だから、Excel VBAやVBプログラマでは、このようなダイレクトにファイル名の名指しはしていません。それは、エラーを想定してコードを組むからです。 こういう場合は、一旦、CreateObject("Excel.Application") で、Excelのオートメーション・オブジェクトを作ってしまえば、セキュリティは通るはずです。 Set xlsWB = CreateObject("Excel.Application") xlsWB.Run xlsWB.Name & "!Excelのプロシージャー" Set xlsWB = Nothing 元の質問を読み違えていたら、この回答は、すべて無意味です。その場合は、どうか、ご質問内容を、もう一度検証した上で、こちらの回答は、お見捨てください。

OZXEDZSPQ
質問者

お礼

説明不足で申し訳ございません。 一つのPCに対してオフィスは1つです。 会社のPCと自宅のPCで検証してました。 バージョンを跨いで使おうとはしていません。 会社のPCではacces2003からexcel2003へ 自宅のPCでは、access2007からExcel2007へ 行なおうとしてました。 >・Access 2003 - Excel 2003 が成功して、Access 2007 - Excel 2007が不成功なのか。 そうなんです。 仰る通りAccess 2003 - Excel 2003 は成功します。ご明察です。 GetObjectをCreateObjectに変更したらうまくいきました! GetObjectが原因のようですね。 ありがとうございました。大変参考になりました。

その他の回答 (1)

  • atom_28
  • ベストアンサー率40% (2/5)
回答No.1

あまり参考にならないかもしれませんが、 渡辺ひかる の「ExcelVBA  実用サンプルコレクション(ISBN4-7973-2087-7)] Office連携 P589 にExcelからAccessを起動し、reportを印刷する。 と言うサンプルがあります。 ExcelにてAccessのObjectを設定し、そのObjectを操作することで、 実態としてのAccess(Acessのマクロ等)を動かすというものです。 dim myAcApp as Access.Application Set myAcApp = CreateObject("Access.Application") With myAcApp -- -- End With Set myAcApp = noyhing

OZXEDZSPQ
質問者

お礼

アクセスからエクセルのプロシージャーを実行させたいので逆にして実行してみましたが、 ピボットテーブルの操作なども含まれている為、 エクセル側で作成したsubプロシージャーを実行したいのです。 ちなみにアクセス側で、 Call Excelのプロシージャー を追加してみたところ、コンパイルエラーになってしまいます。

関連するQ&A