Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13960 / 76734 ←次へ | 前へ→

【68274】Re:プロシージャのスコープについて
発言  ichinose  - 11/2/20(日) 7:24 -

引用なし
パスワード
   おはようございます。

> フォームのボタンを押すことにより、
>処理を実行するようにしたいと思います。
> このフォームは、ブック内の複数シートで共有したいと思います。
> さらに、行いたい処理は、各シートで異なります。
>
> そのため、フォームのボタンのクリックイベントに、
>
>call ActiveSheet.macro1
>
>と記述し、各シートモジュールに、
>
>public sub macro1
>(そのシートで行わせたい処理)


> 質問なのですが、根本的に、
>「シートモジュールは別モジュールから呼び出せない」

オブジェクトモジュール(シートやブックやユーザーフォームやクラスモジュール)
にPublicプロシジャーを記述するということは、
そのオブジェクトに独自のメソッドを作成する ということですよね?
よって、そのオブジェクトのインスタンスさえ取得できれば、
どこからでもメソッドの実行は可能です。
呼び出し元とは、違うブックのシートのプロシジャーだって、
別Excelで開いているブックのシートに記述されているプロシジャーだって・・。

ですから、原則

>call ActiveSheet.macro1

これは出来るはずです。

ただ、VBAは、不可解なことも多いから、

Dim Sht as worksheet

set sht=activesheet
sht.macro1

↑これは、コンパイルエラーになります。

dim sht as objewct
set sht=activesheet
sht.macro1

これは、作動しますが・・・。

以前こんな投稿をしたことがありました。

www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=247;id=FAQ

プロパティとメソッドの違いはありますが、同じだと思います。

Activesheet.macro

理論的には、作動するはずですが、あまり見かけない記述なので
よくよくデバッグした方がよいかもしれませんよ!!

0 hits

【68273】プロシージャのスコープについて S.Satoh 11/2/20(日) 3:56 質問
【68274】Re:プロシージャのスコープについて ichinose 11/2/20(日) 7:24 発言
【68279】お礼:プロシージャのスコープについて S.Satoh 11/2/20(日) 9:55 お礼

13960 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free