INDEX
Publicの概要
アクセス制御 VBAの予約語 | ||
Public 概要 Public は、VBAのプロシージャ(Sub や Function)、変数、定数、またはオブジェクトをモジュール間で共有できるようにするために使用されます。 わかりやすく説明 Public は、「この変数やプロシージャは、どこからでも使えるようにするよ!」という命令です。他のモジュールやフォームからもアクセスできるようになります。 |
||
|
Publicを使ったプロシージャの共有
Public を使って、異なるモジュールから呼び出せるプロシージャを作成する例です。
' Module1
Public Sub ShowMessage()
MsgBox "このメッセージは他のモジュールからも呼び出せます。", vbInformation, "Publicの例"
End Sub
解説:
Public Sub ShowMessage()
にすることで、他のモジュールからも使用可能。- 別のモジュールで
ShowMessage
を呼び出すことができる。
Public 変数を使ってデータを共有する
Public 変数を使うと、異なるモジュール間でデータを共有できます。
' Module1
Public counter As Integer ' 他のモジュールでも使用可能
Sub IncrementCounter()
counter = counter + 1
MsgBox "カウンターの値: " & counter, vbInformation, "カウンター更新"
End Sub
解説:
Public counter
はグローバル変数として扱われ、他のモジュールでも使用可能。- どのモジュールからでも
counter
の値を変更・参照できる。
ExcelでのPublicの活用例(ワークシートを共有)
Public を使って、特定のワークシートオブジェクトを他のモジュールでも使用可能にする例です。
' Module1
Public ws As Worksheet ' ワークシートオブジェクトを共有
Sub SetWorksheet()
Set ws = ThisWorkbook.Sheets("Sheet1")
End Sub
' Module2
Sub UseWorksheet()
If ws Is Nothing Then
MsgBox "ワークシートがセットされていません。", vbExclamation, "エラー"
Else
ws.Range("A1").Value = "Public変数で共有"
End If
End Sub
解説:
- Module1 で
ws
を Public 変数として宣言し、Sheet1 のオブジェクトをセット。 - Module2 で
ws
を使ってセルの値を変更可能。
クラスモジュールでのPublicプロパティの利用
クラスモジュールで Public を使うと、外部からプロパティを直接取得・設定できます。
' クラスモジュール (Class1)
Public Name As String ' 直接アクセス可能なプロパティ
解説:
Public Name
にすることで、外部からobj.Name = "テスト"
のように直接設定可能。- 安全性を考慮する場合は、
Property Get
やProperty Let
を使うのが推奨される。
エラーを回避する方法
Public 変数を使う際に、適切な初期化を行わないとエラーが発生する可能性があります。
Public ws As Worksheet ' 他のモジュールでも使用可能
Sub CheckWorksheet()
If ws Is Nothing Then
MsgBox "ワークシートがセットされていません。", vbExclamation, "エラー"
Else
MsgBox "ワークシートは有効です。"
End If
End Sub
解説:
- Public 変数
ws
は、Set
しないとNothing
のまま。 - 利用前に
Is Nothing
でチェックし、エラーを回避する。
Publicの注意事項
- Public 変数は他のモジュールから自由にアクセスできる: 意図しない変更を防ぐため、適切に管理する。
- クラスモジュールのプロパティには Property を推奨: クラスのデータを適切に管理するため、直接アクセス可能な Public 変数は避けるのが望ましい。
- モジュールレベルで宣言するとグローバル変数になる: 大規模なプログラムでは乱用を避け、必要な場合のみ使用する。
よくある質問
- Q: Public なプロシージャはどこからでも実行できますか?
- A: はい。他のモジュールやフォームからでも実行可能です。
- Q: Public 変数をフォームモジュールで使えますか?
- A: はい。ただし、フォームが破棄されると変数の値もリセットされるため注意が必要です。
- Q: Public 変数の値は VBA の終了後も保持されますか?
- A: いいえ。VBA の実行が終了すると、Public 変数もリセットされます。
- Q: クラスモジュールで Public 変数を使うのは問題ですか?
- A: 可能ですが、推奨されません。
Property Get
やProperty Let
を使う方が安全です。
まとめ
- Public を使うと、プロシージャや変数をモジュール間で共有できる。
- モジュールレベルの Public 変数はグローバル変数として扱われる。
- クラスモジュールのプロパティとして Public 変数を使う場合は注意が必要。
- 適切なエラーチェックを行い、意図しない変更を防ぐことが重要。