Excel VBA質問箱 IV

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

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


2398 / 13646 ツリー ←次へ | 前へ→

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

【68273】プロシージャのスコープについて
質問  S.Satoh  - 11/2/20(日) 3:56 -

引用なし
パスワード
    すみません、ご教授お願いしたく存じます。

 フォームのボタンを押すことにより、
処理を実行するようにしたいと思います。
 このフォームは、ブック内の複数シートで共有したいと思います。
 さらに、行いたい処理は、各シートで異なります。

 そのため、フォームのボタンのクリックイベントに、

call ActiveSheet.macro1

と記述し、各シートモジュールに、

public sub macro1
(そのシートで行わせたい処理)

と記述してみました(分岐文などを省略しようと考えたため)。

 そうしてみたところ、うまく動作しているように見えます。


 質問なのですが、根本的に、
「シートモジュールは別モジュールから呼び出せない」
と認識していましたが、上記は、
フォーム内モジュールからシートモジュールを呼んでいると思いますが、
これは問題はなさそうな事でしょうか?

 どうぞよろしくお願いいたします。

【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

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

【68279】お礼:プロシージャのスコープについて
お礼  S.Satoh  - 11/2/20(日) 9:55 -

引用なし
パスワード
   ▼ichinose 様:

早々にへんしんありがとうございました。
参照も拝見しました。
難しいですが、何となく理解しました。

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

わかりました。ありがとうございます。
何か別の記述方法もないか、考えてみます。

また機会がありましたら、よろしくお願いします。
ありがとうございました!

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