Excel VBA質問箱 IV

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

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


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

【47820】シートモジュールと標準モジュール のぶ 07/3/23(金) 9:11 質問[未読]
【47822】Re:シートモジュールと標準モジュール ichinose 07/3/23(金) 9:33 発言[未読]
【47823】Re:シートモジュールと標準モジュール のぶ 07/3/23(金) 9:40 お礼[未読]
【47839】Re:シートモジュールと標準モジュール ichinose 07/3/23(金) 20:19 発言[未読]
【47851】Re:シートモジュールと標準モジュール inoue 07/3/24(土) 13:49 発言[未読]

【47820】シートモジュールと標準モジュール
質問  のぶ  - 07/3/23(金) 9:11 -

引用なし
パスワード
   XPPro:Excel03 

お世話になります。
今まで、各シートのシートモジュールにボタンをクリックしたら〜〜をする、といった
処理を記述してました。

これをそのまま標準モジュールに移して使うことは可能でしょうか?

標準モジュールとシートモジュールの違いもはっきりは理解していません。

どなたか教授お願い致します。

【47822】Re:シートモジュールと標準モジュール
発言  ichinose  - 07/3/23(金) 9:33 -

引用なし
パスワード
   ▼のぶ さん:
おはようございます。

>XPPro:Excel03 
>
>お世話になります。
>今まで、各シートのシートモジュールにボタンをクリックしたら〜〜をする、といった
>処理を記述してました。

>
>これをそのまま標準モジュールに移して使うことは可能でしょうか?
>

このボタンとは、どんなボタンですか?

1 ツールバー「フォーム」のボタンをシートに配置したもの

2 ツールバー「コントロールツールボックス」のコマンドボタンを
シートに配置したもの

3 既存又は、独自のツールバーにボタンを配置したもの

と考えられますが・・・。

シートに配置していたのなら 2ですか?

これだとすると、標準モジュールにコードを移行するなら
1のボタンに変更すれば、コードを標準モジュールに移行することが可能になります。


>標準モジュールとシートモジュールの違いもはっきりは理解していません。

何故、標準モジュールに移行する必要があるのか等を記述すると
よいアドバイスがあるかと思いますよ!!

出かける前に気が付いたことを記述しました。

【47823】Re:シートモジュールと標準モジュール
お礼  のぶ  - 07/3/23(金) 9:40 -

引用なし
パスワード
   ichinose さん
お返事ありがとうございます。

>このボタンとは、どんなボタンですか?
ボタンは2の通りです。
>2 ツールバー「コントロールツールボックス」のコマンドボタンを
>シートに配置したもの
>

>>標準モジュールとシートモジュールの違いもはっきりは理解していません。
>
>何故、標準モジュールに移行する必要があるのか等を記述すると
>よいアドバイスがあるかと思いますよ!!
最近全く知らない人が作ったVBAを見る機会があり、標準モジュールだけを使用し
すっきりしたプログラムに見えたからです。
得にメリットが無ければ、そのままで行こうと思いますが、どうなのでしょうか?

【47839】Re:シートモジュールと標準モジュール
発言  ichinose  - 07/3/23(金) 20:19 -

引用なし
パスワード
   ▼のぶ さん:
こんばんは。

>
>>このボタンとは、どんなボタンですか?
>ボタンは2の通りです。
>>2 ツールバー「コントロールツールボックス」のコマンドボタンを
>>シートに配置したもの
>>
まず、上記のボタンであれば、イベントプロシジャー
(Private Sub CommandButton1_Click() )
にコードを記述しているはずです。
これは、オブジェクトモジュール(ここでは、シートモジュール)
でないと、記述できません。

また、コードの内容もこのシートに深く関わっている内容であれば、
当該シートモジュールにコードを記述することが適切だと
思いますけどね!!


>最近全く知らない人が作ったVBAを見る機会があり、標準モジュールだけを使用し
>すっきりしたプログラムに見えたからです。

モジュールを分割することがイコール すっきりしていないとは
思いませんが・・・。

>得にメリットが無ければ、そのままで行こうと思いますが、どうなのでしょうか?

先に記述したようにあくまでも
コードの内容もそのオブジェクトに深く関わっている内容だと判断した場合ですが、
シートモジュール(というより、オブジェクトモジュール)
に私がコードを置く場合の大きな理由は外部(別のブック)からの呼び出しが簡単だという理由があります。

その呼び出す際にもSheet1.Testなんて、記述をする(しないと特定できない)ので
手続きが分かりやすいということもあります。
(標準モジュールだって、Module1.test という記述は出来ますが、
test1でも動作しますからね!!)


デメリットでよく見かけるのは、シートにコードを記述すると、
シートをコピーした場合は、コードまでコピーされてしまいます。
コピー先では、コードが要らない場合は、シートモジュールに
コードがあると厄介ですよね!!

どちらが良いかは、目的のプログラムが何なのかによりますよ!!

で、標準モジュールにコードをどうしても記述したいなら、

前投稿で申し上げたように

1のボタンを使うと可能になります。

どちらのボタンが良いかという問題も一長一短あります。

2の「コントロールツールボックス」のボタンだとコードは、
オブジェクトモジュール(シートモジュール)にしか記述できませんが、

1の「フォーム」のボタンなら、標準モジュールでもシートモジュールでも
記述できます。

加えて、フォームのボタンのほうがExcelとの相性も良いようです。
(ボタンの動的な作成にも耐えうるようです)

しかし、「コントロールツールボックス」のボタンは、
後で追加された機能だけあって、
フォームのボタンでは実現できない機能も備えています
(ボタンの色や画像の指定など)し、
イベントも細かく設定できます。

やりたいことによって、使い分ける必要はあると思いますよ!!
(個人的には、ボタンに限って言えば、フォームのボタンのほうが使用頻度が
高いかなあ・・・)。

【47851】Re:シートモジュールと標準モジュール
発言  inoue  - 07/3/24(土) 13:49 -

引用なし
パスワード
   失礼します。

ichinoseさんのを引用させてもらいますが、
> どちらのボタンが良いかという問題も一長一短あります。
フォームのボタンの場合、
マウスカーソルが「指」に変わるなんていうのはどうでも良いでしょうか。
元々は「ダイアログシート」のボタンなので
ワークシートとの親和性は良いようです。

特にセルを選択している場合、
フォームのボタンなら選択セルの太枠表示は移動しませんが、
コントロールツールボックスのボタンだと、
見かけ上ではボタンが選択されてしまいます。

難点なのは、呼び出すプロシージャが「マクロ」の起動ウィンドウにも
表示されてしまうことです。
ボタンを貼り付けていないシートからもマクロを起動される可能性があります。

これには対応策があって、
呼び出されるプロシージャ側でApplication.Callerで呼び出し側のボタン名を
判断するようにします。
逆用すると、呼び出されるプロシージャを1つだけにして、
どのボタンからでもそのプロシージャを「マクロの登録」で登録します。
呼び出されるプロシージャ側では、Application.Callerによって
機能を見分けて、必要なプロシージャを呼び直すという手があります。

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