• ベストアンサー

AccessからExcelの起動、Excel単独起動と違う動作になる。

お世話になります。 Access2007からExcel2003を起動しようとしています。 実際には、AccessVBAより、以下のような呼び方をしています。 ----------------------------------- Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True xlApp.AutomationSecurity = 2 Set xlBook = xlApp.Workbooks.Open("C:\分析.xls") Set xlBook = Nothing Set xlApp = Nothing ----------------------------------- (手動で閉じる) 大体おおまかにこんな感じで作ってあります。 起動するExcelにはボタンが張り付けてあり 押すと処理が開始されます。 実際、起動そのものはされるのですが、同一ファイルにて 1.AccessからExcelを起動してボタンを押す 2.Excelを直接起動してボタンを押す の場合、Accessからの起動では、うまく処理が行われません。 直接起動でうまくいくので、ExcelのVBAの問題ではなく、 起動時の指定、または起動のやり方がまずいのでは、と とらえていますが、調べてもわからない状態が続いています。 (開き方や、マクロの呼び出し等方法を変えましたが  うまくいきません) Excelでは主に、ピポットテーブルを利用してPasteSpecialで値を 設定している作りになっています。 Access2007でもAccess2003でも同じだったと思います。 同様な経験をされ解決した方、方法をご存じの方、 ぜひ教えていただければと思います。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >Set xlApp = CreateObject("Excel.Application") これは、オートメーション・オブジェクトであって、Excel本体で起動するのとは、若干違います。というか、オートメーション・オブジェクトを作るのは、別の意図(つまり、Excel本体を含む他の影響を受けないため)を持って作るのであって、同じ働きとは必ずしも言えません。具体的には、たとえば、Excelの二重起動の際、片方が、読み取り専用になってしまいます。それでは、もうひとつのブックは保存することはできなくなってしまいます。 そして、大きな違いは、アドインやPersonal.xls を呼び出していません。また、Auto_Open などは素通りしていくこと、セキュリティが関係がなくなる、などがあります。 今回は、上記のような問題はないので、フル機能のExcelを使う場合は、このようにします。 ret = Shell("c:\Program Files\Microsoft Office\Office\EXCEL.EXE " & FileName,1) または、  Set WshShell = CreateObject("Wscript.Shell")  WshShell.Run "EXCEL.EXE " & FileName , 1 , True などとします。 注意:EXCEL.EXE のあとは、半角スペースを必ず空けて、ファイル名を付けてください。

yasdon
質問者

お礼

ありがとうございます。 Shellでうまくいかなかった、と思い込んでた様で ご指摘の通りやるとうまく行きました。 あとはバージョンのパスの問題がありますが、なんとかします。 オートメーション・オブジェクトの考え方についても とても参考になりました。 本当にありがとうございました。

その他の回答 (2)

  • snc35744
  • ベストアンサー率20% (8/39)
回答No.2

>xlApp.AutomationSecurity = 2 この1行でマクロを無効にしてるのでは? xlApp.AutomationSecurity = msoAutomationSecurityLow で、できるかも。

yasdon
質問者

補足

早速の回答ありがとうございます。 エクセルでの実行時に他ファイルでコピーされた値を シートに張り付けているのですが、 その際に、貼り付けてない箇所に、IFやNETWORKDAYS関数が うまく動いてないのが問題のようだとご指摘の内容を実行中に 気がつきました。 しかし、msoAutomationSecurityLow(=1)にしても、2でも結果は 同じです。 シート内の計算式は実行されないのであれば、 計算させる方法、 または、手動と同じ環境で起動できないものでしょうか。 原因が質問件名と変わってきたのですが、教えていただけませんか。

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

情報が少ないので判断が難しいのですが、本当に起動方法の問題なのでしょうか? 実行されるマクロ内でのオブジェクトへの参照方法はオートメーションによる操作でも影響を受けないつくりでしょうか? また、うまくいかないとはどういう現象が起きているのでしょうか?

yasdon
質問者

補足

早速のご回答ありがとうございます。 手動で起動した場合、うまくいって、VBAから起動させると うまくいかない・・・なので、そう思ってました。 現象としては、ピポットテーブルの実行結果が 「#NAME?」となっていますようです。 VBAのソースを見る限り、外部のファイルのデータ取得も 絶対パスとなっているので、大丈夫だと思ってました。 ・・・甘いですかね。 ピポットのピの字もわからないので、 集計しているテーブルみたいなものとしかとらえてなかったのですが ソース的には、自ファイルにコピペしたシートから 情報と取っているようです。 (追いづらいので、読み切れてません) すみません、補足になりましたでしょうか。

関連するQ&A