• ベストアンサー

Sub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・ 自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。 ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。 Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか? どなたか説明頂けませんか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#102878
noname#102878
回答No.1

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。 「指定項目」のところに「Public」と「Private」の説明がありますよ。 省略して「Sub hogehoge()」とした場合は「Public」とみなされます。 Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。 Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。 もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。 そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。 ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。 Test1はPublicで、Test2はPrivateだからです。

noname#4100
質問者

お礼

Privateを省略したSubはPublicとして扱われるのですね!(全然知りませんでした・・・) ありがとうございました! (申し訳ありません、もっと自分でヘルプを見てみることを覚えます・・・)

その他の回答 (2)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.3

予断ですが、趣味でやられてるのか仕事なのかはわかりませんが、 ただ単にSubと記述するのではなくて、明確にPublicとPrivateを 記述するように心がけた方がいいですよ。 VBの関数名等は、英語の単語そのものが多いですのでその単語を 和訳して、解釈するのも間違いではないですよ。 ただ、全てがそうとはいえないですけどね。 Private → 個人 Public → 共有

noname#4100
質問者

お礼

お礼が遅くなりまして申し訳ありません。 私もここで伺ってから、きちんと書くようにしました(^^) ありがとうございました。

noname#4564
noname#4564
回答No.2

  ついでですので、Friendスコープもいっしょに憶えておきましょう。

noname#4100
質問者

お礼

Friendというのは初めて聞きました・・・ クラスモジュールのメソッドを外部から使える・・・とこの回答を拝見してからWebで見ました。 クラスモジュールはまだ使った(作った?)ことがありません。 確か他のプロジェクトからも使えるのですよね・・・ そういうのをいつか効率よく作れるようになりたいです(^^) ありがとうございました。

関連するQ&A