重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは、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")

A 回答 (3件)

新規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関係のプログラムを指定できると(我流で)理解しています。
    • good
    • 0
この回答へのお礼

詳しく説明してくださってありがとうございます!

実際にコードを変更してみました。
すると、エラーも出ずにVBAを起動させることが
できました!
ありがとうございます!

>(2)Set Wbook = GetObject("C:\テスト.xls")
>Set Exap = Wbook.Application
>は発想が逆では。

う~む。。たしかにご指摘のとおり逆だなと思います。。
まだVBを始めたばかりなので
初歩的なことでもよく分からない部分が多いです^^;

お礼日時:2004/12/16 21:56

Call Exap.Run("Keisan")


の部分をサンプルのように
Call Exap.Run("テスト.xls!Keisan")
とすることで実行できました。
名前の解決のために、必要なようです。

この回答への補足

Call Exap.Run("Keisan")
ではエラーが出てしまっていたので
BLUEPIXYさんの回答を参考にして、

Call Exap.Run("ThisWorkbook.Keisan")

としてみたらエラーも出ずに実行できました^^;

テスト.xlsのThisWorkbookというところに
コードを書いていたので
Keisanだけでなく
ThisWorkbook.Keisanというふうに
しなきゃいけなかったんですね~(汗)

補足日時:2004/12/16 21:59
    • good
    • 0
この回答へのお礼

迅速な返答ありがとうございます!

しかし、
Call Exap.Run("テスト.xls!Keisan")
で実行をしても
なぜか、同じエラーになってしまいました。。

う~ん。なぜでしょうか??

お礼日時:2004/12/16 21:51

参照設定で



Microsoft Office 9.0 Object Library
(Officeのバージョンにより異なると思いますが)

などを追加しましたか?

この参照設定で
ExcelVBA用のオブジェクト(WorkbookやWorksheetなどなど)が使えるはずです。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます!

私の場合は
Microsoft Office 10.0 Object Library
だったと思いますが
参照で追加してみました。

エクセルを開いてセルにはいっているデータを
VBで使ったりすることはできたんです。

でもなぜかVBAを実行することはできませんでした(T-T)

お礼日時:2004/12/16 21:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!