[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/08/29(Mon) 18:57
投稿者名:KIRIRI
Eメール:
URL :
タイトル:
VBからエクセルVBAを登録
いつもお世話になっています。

VB6 SP6 EXCEL2000
で作成しています。

1.VBからエクセルファイルを新規作成し
2.Sheet1へコマンドボタンを配置し
3.コマンドボタンを押したときの処理をエクセルVBAへ書く
というプログラムを作成しています。

1と2は問題なくできるのですが
3でVBAへ処理を書き込む際に標準モジュールへ書き込んでいます。
そのせいか、作成したエクセルファイルのコマンドボタンを押しても
3の処理を実行しません。
試しに、エクセルVBAにて3の内容をSheet1へコピペしたところ上手くいきましが
VBからSheet1のVBAへ書く方法がわかりませんでした。
クラスモジュールやフォームへの方法ならあったのですが・・・

原因と対処法を教えていただけないでしょうか?
よろしくお願いします。

以下コードです。

Public xlVBE        As Object               'VBIDE.VBE
Public xlMod        As Object               'VBIDE.VBComponent
Public xlCode       As Object               'VBIDE.CodeModule
※上記でAs Objectといているのは以前
hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3927&page=60
ということがあったためです。

    Set xlVBE = xlApp.VBE
    Set xlMod = xlVBE.VBProjects(1).VBComponents.Add(vbext_ct_StdModule)
    Set xlCode = xlMod.CodeModule

    xlCode.InsertLines 1, "VBAの内容を記述"

投稿時間:2005/08/29(Mon) 19:21
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: VBからエクセルVBAを登録
> 3でVBAへ処理を書き込む際に標準モジュールへ書き込んでいます。
> そのせいか、作成したエクセルファイルのコマンドボタンを押しても
> 3の処理を実行しません。
> 試しに、エクセルVBAにて3の内容をSheet1へコピペしたところ上手くいきましが

標準モジュール へどのように書いたのでしょうか?
通常、標準モジュールに書けばどの Shhet からでも呼び出せるはずですが。
なぜ、呼び出せないか、こちらの原因を先に調べる方が先決では。

>※上記でAs Objectといているのは以前
開発環境で正常に動作を確認するまでは、事前バインディング でテストされる事をお勧め
します。(エラーを早く発見する上でも)

投稿時間:2005/08/29(Mon) 19:39
投稿者名:KIRIRI
Eメール:
URL :
タイトル:
Re^2: VBからエクセルVBAを登録
レスありがとうございます。

> > 3でVBAへ処理を書き込む際に標準モジュールへ書き込んでいます。
> > そのせいか、作成したエクセルファイルのコマンドボタンを押しても
> > 3の処理を実行しません。
> > 試しに、エクセルVBAにて3の内容をSheet1へコピペしたところ上手くいきましが
>
> 標準モジュール へどのように書いたのでしょうか?
> 通常、標準モジュールに書けばどの Shhet からでも呼び出せるはずですが。
> なぜ、呼び出せないか、こちらの原因を先に調べる方が先決では。

VBAのコードを見直してみたところ、1行目が
    xlCode.InsertLines 1, "Private Sub CommandButton1_Click()" & vbCrLf _
と「Private」となっていたので
    xlCode.InsertLines 1, "Public Sub CommandButton1_Click()" & vbCrLf _
と「Public」に変更したらできました。

VBAの内容も乗せておくべきでした。申し訳ありません。
恥ずかしい限りです。
板汚し失礼いたしました。

> >※上記でAs Objectといているのは以前
> 開発環境で正常に動作を確認するまでは、事前バインディング でテストされる事をお勧め
> します。(エラーを早く発見する上でも)

ご指摘ありがとうございます。
これで一区切りつきそうなので、さっそくテストしてみます。

ありがとうございました。

投稿時間:2005/08/29(Mon) 19:54
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: VBからエクセルVBAを登録
> VBAのコードを見直してみたところ、1行目が
>     xlCode.InsertLines 1, "Private Sub CommandButton1_Click()" & vbCrLf _
> と「Private」となっていたので
>     xlCode.InsertLines 1, "Public Sub CommandButton1_Click()" & vbCrLf _
> と「Public」に変更したらできました。


それも、どうかと思います。 下記参照願います。
CommandButton1 のイベントの処理に関しては Sheet 等に書いた方がいいのでは。
マクロ等は、標準モジュールに書いて。
hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3815&page=60

Set xlMod = xlVBE.VBProjects(1).VBComponents("Sheet1")
Set xlCode = xlMod.CodeModule
'CommandButton1_Click() イベントとそのコードを記入
xlCode.InsertLines 2, "Private Sub CommandButton1_Click()" & vbCrLf _
                   & "    Call Test()" & vbCrLf _
                   & "End Sub"

投稿時間:2005/08/30(Tue) 09:41
投稿者名:KIRIRI
Eメール:
URL :
タイトル:
Re^4: VBからエクセルVBAを登録
> それも、どうかと思います。 下記参照願います。
> CommandButton1 のイベントの処理に関しては Sheet 等に書いた方がいいのでは。
> マクロ等は、標準モジュールに書いて。
> hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3815&page=60
>
> Set xlMod = xlVBE.VBProjects(1).VBComponents("Sheet1")
> Set xlCode = xlMod.CodeModule
> 'CommandButton1_Click() イベントとそのコードを記入
> xlCode.InsertLines 2, "Private Sub CommandButton1_Click()" & vbCrLf _
>                    & "    Call Test()" & vbCrLf _
>                    & "End Sub"

さらなるご指摘ありがとうございます。
上記の方法を使わせていただきます。
ありがとうございました。