- ベストアンサー
excl:ツール→マクロでの一覧表示からサブルーチンを外したい
類似のシートに対して、同様な操作を行うため、親プロシージャをシートの選択、サブルーチンを具体的な処理として、EXCL2000にて、プログラムを組みました。 他のプログラムでは、ツール→マクロ→マクロで、表示されるプログラム一覧にサブルーチンプログラムは表示されないのですが、今回作ったものは、親子ともに表示されてしまいます。 誤操作防止のため、サブルーチン(子プロシージャ)は一覧からはずしたいのですが、どのようにしたらよいのか、回答頂けましたら、幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
今確認してみたら、Optional の引数だけでは、「マクロの一覧に表示されてしまいますね。#4の以下の部分は「マクロの一覧」に表示させないという点に関しては、間違いでした。撤回します。最近、とぼけた回答ばかりで、皆様にご迷惑をおかけしてます。申し訳ありません。 >この場合、プロシージャをコールする際にも引数を指定する必要がありますが。 の部分の補足ですが、引数に Optional キーワードをつけると引数を渡さず、プロシージャをコールできます。
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
#3です。#3の回答のなかで >この場合、プロシージャをコールする際にも引数を指定する必要がありますが。 の部分の補足ですが、引数に Optional キーワードをつけると引数を渡さず、プロシージャをコールできます。 EX) Sub TestMacro (Optional DummyParam) --> Call TestMacro のように引数を渡す必要がありません。 このダミーの引数をもたせる意義ですが、、 Private Sub だと異なるモジュール間でプロシージャをコールできません。ですから、「マクロの一覧」に表示をしたくない、かつ異なるモジュールからはプロシージャをコールする必要がある場合には、私はこの方法を使っています。 他にもっとスマートな方法があると思うのですが、、、
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 Private Sub ~ とするのが基本ですが、、 Sub TestMacro(Param) のように引数をとるプロシージャはマクロ一覧には表示されません。引数をとらないプロシージャの場合には、ダミーの引数をもたせればOKです。 この場合、プロシージャをコールする際にも引数を指定する必要がありますが。 方法のひとつとして、ご参考願います。
- hana-hana3
- ベストアンサー率31% (4940/15541)
モジュールの先頭行に Option Private Module の一行を加えると、そのモジュールの全てのプロシージャは表示されなくなります。 または、プロシージャに対して個々に Private 宣言を行ってください。
お礼
おかげさまで、目的を達成し、早速活用させて頂きました。この度は、大変勉強になりました。 ご回答、まことにありがとうございます。
- Zero_0
- ベストアンサー率35% (72/201)
標準モジュール内のSub及びPrivate sub 何でしょうか。 モジュール内に作成した sub はマクロ表示で表示されます。その中でだけ使う private sub は表示されませんのでそのあたりでどうでしょう。 標準モジュール内 Sub aaa() ・・・・・・・・・表示されます Sheets("sheet1").Select 表示 End Sub Private Sub 表示() ・・・・・・表示されません Cells(1, 1) = "A" End Sub
お礼
早い時間にもかかわらず、早速のご回答まことにありがとうございます。 実際に、入力してみましたところ、一覧から外れ、動作に問題が発生しないことが分かり、早速活用させて頂きました。 Private などは、制限が加わるのかと、すべて一様にSub構文を使っていましたが、同じモジュール内ならば、問題ないことがよく分かりました。
お礼
対策と共に、これまで作ったマクロが、親プロシージャのみ表示された理由がよく分かりました。 迷惑など、決して感じておらず、とても参考になりました。 この度は、ご回答をまことにありがとうございました。