diary主にVBAネタを扱っているブログです。VBAの研究・考察ユーザーに実行させたくないマクロを「マクロの実行」メニューから隠す方法として最も簡便なのはプロシージャをPrivateにしてしまうことだ。マクロがある程度大きくなると、複数のモジュールにプロシージャを分散させたい場合がある。他モジュールから呼び出すためには、Publicにする必要があるが、単にPublicにするとマクロの実行メニューにも見えてしまう。今回はこのジレンマを解消する方法を紹介する。引数があるプロシージャはたとえPublicでもマクロの実行メニューに表示されない。引数を使わない場合はどうすれば良いかというと、Optionalで適当なダミー引数を設定してしまえば良い。標準モジュールを作って以下のコードを挿入する。"このプロシージャはマクロの実行メニューには表示とされません。SubHiddenProcedureプロシージャは引数があるので単体では実行できなくなるが、Mainからだと普通に呼び出せる。Publicなので他プロシージャからの呼び出しも可能。以前はdummyという名称の仮引数を作って実際に1とか0とかの実引数を渡していたんだけど、単にOptionalで良いことに気付いたので今回記事にした。今回のvoidはC言語のキーワードから英単語を拝借した。Cでは引数をとらない場合にキーワードvoidを指定する。0;}初期値は何でも良いので最初は0とか""とかにしていたけれど、VBAのキーワードEmptyが最も意図をよく表していることを発見して置き換えた。ちなみにSubの代わりにFunctionを用いれば引数をつけなくてもマクロメニューから隠すことはできる。Functionの主目的は値を返すことだから、私の場合、値を返さない純粋な手続きの場合はSubで作る。追記Twitterでimihitoさんに情報もらったので追記。Module」を記述するとそのモジュールのマクロは見えなくなるとのこと。実際やってみると、マクロメニューからは隠れ、他モジュールからの呼び出しは成功した。専用ツールを使わないカスタムリボン作成チュートリアル今回はマクロを実行できるリボン作成方法の紹介。マクロ、プロシージャ、メソッドなどの用語について正確に理解する初心者向けの解説によくマクロとVBAの違いが取り上げられる。はてなブログPro弓道と英語が趣味のVBAプログラマーです。大阪でシステム運用の仕事をしています。このブログに掲載しているコードは利用規約の範囲で自由にお使いください。VBAの無料入門教材を配布していますので、VBAを初めてみたい方、ぜひお立ち寄りください。Amazonアソシエイト・プログラムの参加者です。はてなブログをはじめよう!t-homさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。