
こんにちは、VB初心者です。
VB6.0を使用しています。
VBからエクセルのVBAを起動させたいと思っています。
過去ログを参考にして下のようにして実行してみたのですが、
「実行時エラー'1004':マクロ'Keisan'が見つかりません。」
と、エラーが出てしまいVBAを起動することができません。
(ExcelVBAの関数(?)名はKeisan()です。)
どうすればエラーを出さずに
VBからVBAを起動させることができるのでしょうか?
何か参照し忘れていたり
Callの以前に何かを宣言をしておかなければいけないのでしょうか?
********
Dim Wbook As Excel.Workbook
Dim Exap As Excel.Application
Set Wbook = GetObject("C:\テスト.xls")
Set Exap = Wbook.Application
Call Exap.Run("Keisan")
No.1ベストアンサー
- 回答日時:
新規BOOK1のmodule1にMsgbox "keisan"だけのプログラムを作り、Vbcall1という名のブックに保存しました。
VBのForm_Loadモジュールに
Private Sub Form_Load()
Dim Exap As Object
Dim Wbook As Object
Set Exap = CreateObject("Excel.application")
Exap.Workbooks.open "C:\my Documents\Vbcall1.xls"
Call Exap.Run("module1.Keisan")
End Sub
を作って実行すると、「keisann」とMsgboxの表示が出ました。
Set Exap = CreateObject("Excel.application")
でエクセルのVBAプログラムの中に入ると、エクセルVBA
のWorkbooks.openなどが使えるようになります。
質問のコードについて
(1)Dim Wbook As Excel.Workbook
Dim Exap As Excel.Application
VBの世界にいる間では、Excel.Workbook、Excel.Application型のオブジェクトを認識できない(この点やや不確か)と思うのですが。ですから一般的なObjectでやって見ました。
(2)Set Wbook = GetObject("C:\テスト.xls")
Set Exap = Wbook.Application
は発想が逆では。
Excel.applicationを捉えて、その後にWorkbooksのことが出てくるべきでしょう。Excel.applicationはエクセルプログラムの全体で、そのあり場所を認識して後に、はじめてその一部分のブックOpen関係のプログラムを指定できると(我流で)理解しています。
詳しく説明してくださってありがとうございます!
実際にコードを変更してみました。
すると、エラーも出ずにVBAを起動させることが
できました!
ありがとうございます!
>(2)Set Wbook = GetObject("C:\テスト.xls")
>Set Exap = Wbook.Application
>は発想が逆では。
う~む。。たしかにご指摘のとおり逆だなと思います。。
まだVBを始めたばかりなので
初歩的なことでもよく分からない部分が多いです^^;
No.3
- 回答日時:
Call Exap.Run("Keisan")
の部分をサンプルのように
Call Exap.Run("テスト.xls!Keisan")
とすることで実行できました。
名前の解決のために、必要なようです。
この回答への補足
Call Exap.Run("Keisan")
ではエラーが出てしまっていたので
BLUEPIXYさんの回答を参考にして、
Call Exap.Run("ThisWorkbook.Keisan")
としてみたらエラーも出ずに実行できました^^;
テスト.xlsのThisWorkbookというところに
コードを書いていたので
Keisanだけでなく
ThisWorkbook.Keisanというふうに
しなきゃいけなかったんですね~(汗)
迅速な返答ありがとうございます!
しかし、
Call Exap.Run("テスト.xls!Keisan")
で実行をしても
なぜか、同じエラーになってしまいました。。
う~ん。なぜでしょうか??
No.2
- 回答日時:
参照設定で
Microsoft Office 9.0 Object Library
(Officeのバージョンにより異なると思いますが)
などを追加しましたか?
この参照設定で
ExcelVBA用のオブジェクト(WorkbookやWorksheetなどなど)が使えるはずです。
アドバイスありがとうございます!
私の場合は
Microsoft Office 10.0 Object Library
だったと思いますが
参照で追加してみました。
エクセルを開いてセルにはいっているデータを
VBで使ったりすることはできたんです。
でもなぜかVBAを実行することはできませんでした(T-T)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++初心者です。 debug asserti...
-
VBにてDLLをデバックする方法。
-
VisualStudioでC#が実行できない
-
一通ずつ処理したい(アウトル...
-
JP1/File Transmission Server/...
-
実行ファイル(.exe)が別のPC...
-
Eclipse CDT MinGWによるC言語
-
VB.net(WEB)プログラムのPDFフ...
-
外部exe呼び出しの方法 ShellEx...
-
matlabで作成したdllをVBAで使...
-
VBAでコマンドプロンプトを呼び...
-
Windows PowerShellでC言語を実...
-
Visual Studio 「AnyCpu」について
-
VC++2010でのエラー
-
VBAでArrayListを使う為の「msc...
-
VBAでIEが起動しているか...
-
Designer.vbは直接コードをいじ...
-
印刷ダイアログを表示させたくない
-
意味不明の実行時エラーで困っ...
-
VB.NETで参照設定したDLLの修正...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excel vbaから実行するexe実行...
-
Windows PowerShellでC言語を実...
-
C++初心者です。 debug asserti...
-
「読み込み違反」が起きたとき...
-
Visual Studio 「AnyCpu」について
-
JP1/File Transmission Server/...
-
(msvcr71d.dll) でハンドルされ...
-
mscorlib.dllの初回例外について
-
androidで.exeを実行できますか?
-
VB6.0 exe作成時に実行時エラー...
-
VBコンソールアプリケーション...
-
ActiveDirectoryから値を取得
-
Eclipse CDT MinGWによるC言語
-
ACCESSランタイムでエラー
-
matlabで作成したdllをVBAで使...
-
VBで「ファイル名を指定して実...
-
外部exe呼び出しの方法 ShellEx...
-
VB6 EXEとプログラムの違い
-
CreateFile が ERROR_PATH_NOT_...
-
ActiveX → VB を起動するとCre...
おすすめ情報