VBAで自動化 VBA一覧 エラー対策

【VBA】ExcelVBAのPublic変数が参照できないのは書く場所が間違っている

グローバル(Public)キーワードとは?

Publicキーワードは、VBA に関して変数、定数、処理(サブルーチンや関数)をモジュールの外からアクセス可能にするために使用されます。これにより、他のモジュールからPublicで宣言された変数を参照することが可能になります。

Public変数や定数の書く場所とは

SubルーチンやFunction関数内に記載すると以下の様なエラーがでます。

コンパイル エラー:Sub または Functionの属性が適切ではありません。

処理の順番を考慮せずに、End SubやEnd Functhinの後に書くと以下のようなエラーがでます。

コンパイル エラー:End Sub、End Function または End Property 以降には、コメントのみが記述できます。

Publicで宣言する場合には、Sub~End Subの前に記述が必要です。Function関数の場合も、Functhin~End Functhinの前に書くことによりエラーになりません。

Public変数や定数の書き方とは

変数や定数をPublic宣言すると、プロジェクト内のどこからでもアクセスできるようになります。
変数を宣言する時は「Dim」の代わりに「Pubilc」を使用します。
定数を宣言する時は「Pubilc」を追加して書きます。

Public Const PI As Double = 3.14159
Public myValue As Integer

SubやFunction関数をPubilcで公開

サブルーチンや関数としてもPublic宣言できます。これにより、他のモジュールからこれらの処理を呼び出せるようになります。

Public Sub MyProcedure()
' コード...
End Sub

Public Function MyFunction() As Integer
' コード...
End Function

Pubilcを使用するメリット・デメリット

【メリット】

・他のモジュールで使用したPubilc変数を使用できる
Pubilc変数を使用せずに処理が複雑なマクロを作成する際は、1つもモジュールに長いコードを書くことになります。開発者はわかりますが他の人はなかなか理解するのが難しく、メンテナンスも大変になります。動作ごとにモジュールを分けてコーディングすることで、メンテナンス性も向上します。

【デメリット(気を付けるポイント)】

・同じ名前のパブリック変数と手続きの重複
複数のモジュールで同じ名前のPublic変数や手続きを宣言した場合、名前の衝突が発生します。

・ライブラリやアドインでの名前衝突
使用している外部ライブラリやアドインに、既に宣言されているPublic変数や手続きと同じ名前のものがある場合、衝突が発生する可能性があります。これは、特に他の開発者が作成したコードやライブラリを統合する際に問題となることがございます。

・VBAのキーワードや組み込み関数との衝突
VBAの予約語や組み込み関数と同じ名前をPublic変数や処理に使用すると、意図せず動作したりエラーが発生する可能性があります。

【意図しないエラー対策】
・一意的な命名規則の採用
衝突を恐れるために、一意的なかつ説明的な名前を使用する。

・プレフィックスの使用
モジュール名やプロジェクト名などを変数名に含めることで、一意性を高めます。

・外部ライブラリの確認
外部ライブラリを使用する場合は、名前の衝突がないか事前に確認します。

-VBAで自動化, VBA一覧, エラー対策