-PR-
解決済み

VBからEXCELを起動する

  • すぐに回答を!
  • 質問No.90286
  • 閲覧数1112
  • ありがとう数6
  • 気になる数1
  • 回答数4
  • コメント数0

お礼率 30% (13/43)

VBよりExcelを起動するプログラムで困っています。

1.VBよりGetObject関数でTest.xlsを開く
2.Test.xls内のAuto_Openマクロでパラメータファイルをよみ、そこに指定されているエクセルファイルを新しいブックでを開く

ということをしたいのですが(「マクロを有効にする」のダイアログは表示されてもかまわないです)、何故かTest.xlsが開いたと思ったらすぐ閉じてしまいます(Excel自体は終了してないですべてのワークシートが閉じた状態)。
Auto_Openマクロは走ってるようなのですが、ついでにCloseマクロも走ってしまいます。

ちなみにTest.xlsを単体で動かしたときは問題なく動くのです・・・。

以前はVB4+Excel95の環境でAPI(CreateProcess)を使用し同作業を行っていたのですが、そのAPIが長いファイル名のスペース(OFFICEがある「Program File」のスペース)を認識しないそうで、この方法が使えないということでGetObjectを使用してみたのですが・・・。

何か根本的な間違いをしているのか、それともコードにエラーがあるのかさっぱりわからずお手上げです。
うまく疑問点を説明できているか不安なんですが、わかる方、どうかご指導願います。
よろしくお願いします。

----------------------------------------
OSは、Windows 2000
アプリケーションは、Excel 2000 です
----------------------------------------
通報する
  • 回答数4
  • 気になる1
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル11

ベストアンサー率 49% (139/279)

VBAからのワークブックのOpenでは、Auto_Openマクロは、動作しませんよ。ThisWorkbookのWorkbook_Open()イベントは、起動しますから、処理をこちらに変えるか、Runメソッドでマクロを実行させましょう。

Runの例です。

Dim objExl As Excel.Application
Dim objBook As Workbook
Set objExl = CreateObject("Excel.Application")
Set objBook = objExl.Workbooks.Open("開きたいブックのフルパス名")
objExl.Run "Auto_Open"
objBook.Close savechanges:=False
set objBook = Nothing
objExl.quit
Set objExl = Nothing
お礼コメント
terako

お礼率 30% (13/43)

御礼が遅くなり申し訳ありません。
解決しました。ありがとうございました。
投稿日時 - 2001-08-02 02:06:28
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル13

ベストアンサー率 33% (427/1283)

その部分だけもいいので、ソースを補足して下さい。

 ちなみに私は、ShellExecuteEx をつかって、拡張子に関連づけされているアプリケーションを起動する様にしています。
 以下にVCでかいた時のソースを載せます。これをVBでやれば、xlsが開きます。
-----一部抜粋
lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
lpExecInfo.fMask = 0;
lpExecInfo.hwnd = m_hWnd; // 自分のハンドル
lpExecInfo.lpDirectory = NULL;
lpExecInfo.lpFile = sFileName; // ファイル名
lpExecInfo.lpVerb = NULL;
lpExecInfo.nShow = 1;
lpExecInfo.lpParameters = NULL;
lpExecInfo.hInstApp = 0;
ShellExecuteEx(&lpExecInfo);
-----ここまで
補足コメント
terako

お礼率 30% (13/43)

早速のお答えありがとうございます。
VBのコードは以下のようになっています。

Sub Excel_Open

dim obj as object

set obj = GetObject(c:\Test.xls)
obj.visible = True

End Sub
投稿日時 - 2001-06-14 18:49:19
  • 回答No.2
レベル7

ベストアンサー率 0% (0/2)

いつも使っているのは次のような手順です。

1.メニューのプロジェクト→参照設定で
 Microsoft EXCEL Object Libraly を選択する。
 これはチェックを入れて選択します。
2.General宣言のところで
 Public appEXCEL as Excel.Application
Public wbTest as Excel.Workbook
を宣言する。
3.ブックを読みたい所で
 Set appEXCEL = GetObject("Excel.Application")
 Set wbTest = appEXCEL.Workbooks.Open(App.path & "¥Test.xls")

のようにしてできないでしょうか?
私だったら、ブックを開いてパラメータファイルを読む所は、Auto_Openマクロにやらせないで、VBの中で
自力で読むと思います。 
お礼コメント
terako

お礼率 30% (13/43)

今回は処理と仕様が煩雑な為VBからファイルを読む処理ができなかったので・・・。
アドバイスありがとうございました。おかげさまで解決しました。
投稿日時 - 2001-08-02 02:10:13
  • 回答No.3
レベル13

ベストアンサー率 33% (427/1283)

補足から...

 それでは、そのサブルーチンが終了した時点で、objが破棄されるので、Excelが消えてなくなります。
 消えるのが正しい動作ですが...これを繰返すと、メモリが残されるので、あまり良いとは思えません。

 使ったオブジェクトは解放した方が良いでしょう。

 それから...ね。
 GetShortPathName APIを使用すれば、長いファイル名→短いファイル名 の変換が出来ます。
お礼コメント
terako

お礼率 30% (13/43)

御礼が遅くなり申し訳ありません。
解決しました。
メモリを解放する・・・という点も留意してコーディングできました。ありがとうございました。
投稿日時 - 2001-08-02 02:07:40
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ