【Access VBA】Public変数の使い方とよくあるエラー・対策を解説

「一つの変数を複数のモジュールやプロシージャで使いたい」

そう思ったことはありませんか?

Access VBAでは、Public変数を使うことで簡単に実現することができます。

この記事ではPublic変数の使い方とよくあるエラー・対策について解説します。

この記事で分かること
  • Access VBAでのPublic変数の使い方
  • Dim・Private・Publicの違い
  • モジュール間などでの値の共有方法
  • Public変数でよくあるエラーとその対策
目次

Public変数とは

Public変数とは、Access VBAで宣言されたプロジェクト全体で共有できる変数のことです。

複数のフォームやモジュールで同じ値を使いたい場合に利用されます。

VBAでは変数の有効範囲(スコープ)によってDim・Private・Publicを使い分けます。

  • Dim:宣言したプロシージャ内だけで有効なローカル変数
  • Private:宣言したモジュール内だけで有効なモジュール変数
  • Public:プロジェクト全体で共有できるグローバル変数

Public変数は複数のモジュールやフォームからアクセス可能でプロジェクト全体で値を保持できます。

主にフォーム間で値を共有したい場合や、ログインユーザー情報を保持したい場合などに利用されます。

基本的な書き方

Public変数の基本的な書き方は次の通りです。

Public 変数名 As データ型
Public userName As String

Public counter As Integer

書き方自体はDimでの宣言方法と変わりませんが、

スコープがプロジェクト全体になる点がPublic変数の特徴です。

Dim・Private・Publicの違い

それぞれの違いについて表で整理することで理解がしやすいです。

スクロールできます
Public PrivateDim
スコーププロジェクト全体宣言したモジュール内 宣言したプロシージャ内
宣言場所標準モジュールの先頭モジュール先頭プロシージャ内またはモジュール先頭
値の保持プロジェクトがリセットされるまでモジュールが有効な間宣言範囲を抜けると消える
用途複数のモジュールで共有モジュール単位で共有その範囲内だけで使用

実務で役立つPublic変数の使い方

Public変数を活用したVBAのサンプルコードをご紹介します。

ログイン情報をPublic変数で渡す

ログインフォームで入力されたユーザー名をPublic変数に保存し、別フォームでその値を参照するVBAの例です。

標準モジュール

Public userName As String

ログインフォーム

Private Sub ログイン_Click()
    userName = Me.ユーザー名
End Sub

データ入力フォーム

Private Sub Form_Load()
    Me.ユーザー名 = userName
End Sub

※「ユーザー名」はフォーム上のテキストボックス名です。

  • userName がプロジェクト全体で使える
  • ログインフォームで userName に値をセット
  • 別フォームでも同じ値を参照可能

ポイント

  • フォーム間で値を簡単に共有できる
  • 複数フォームで同じ情報を扱う際に便利

処理済みフラグをフォーム間で共有

Public変数をフラグとして使用し、処理が実行されたかどうかを別フォームで判定する例です。

標準モジュール

Public isProcessed As Boolean

Form1(処理を実行するフォーム)

Private Sub btnProcess_Click()
    ' 何かしらの処理を実行
    MsgBox "処理を実行しました"
    
    ' フラグをTrueにセット
    isProcessed = True
End Sub

Form2(処理状態を確認するフォーム)

Private Sub Form_Load()
    If isProcessed Then
        MsgBox "すでに処理済みです"
    Else
        MsgBox "まだ処理されていません"
    End If
End Sub
  • isProcessed がプロジェクト全体で使える
  • Form1で処理を実行すると isProcessed が True になる
  • Form2で処理済みかどうかを判定できる

ポイント

  • 処理状態をフラグとして管理できる
  • 別フォームでも処理状態を確認できる

よくあるエラーと対策

Public変数の値が消える

Public変数はVBAがリセットされると初期化されます。

初期化されるのは次のようなケースです。

  • コードでエラーが発生
  • VBAの「リセット」ボタンを押した
  • デバッグ停止
  • Accessを再起動

例えば次のようにPublic変数を宣言していた場合

Public userName As String

VBAがリセットされると、userNameの値は

""(空文字)

に初期化されてしまいます。

対策

重要な値は次の場所などに保存するようにしましょう。

  • テーブル
  • TempVars
  • フォームコントロール

Public変数をフォームモジュールに書く

' フォームモジュール
Public userName As String

この場合userNameそのフォームだけでしか使えません。

プロジェクト全体で使う場合は「標準モジュール」に書く必要があります。

正しい書き方

' 標準モジュール
Public userName As String

値が意図せず変更される

Public変数はどこからでも変更できるため別の処理で値が変更されることがあります。

userName = "田中"

userNameに「田中」という値を入れたはずが別のモジュールで

userName = ""

と意図しない値に変更される可能性があります。

対策

  • 必要な場合だけPublic変数を使う
  • 変数はなるべく狭いスコープで使う
  • 処理の流れを整理する

まとめ

今回はPublic変数の使い方とよくあるエラー・対策について解説しました。

Public変数を使うことで複数のフォームやモジュール間で値を共有することができます。

一方でどこからでも値を変更できるためバグの原因になることもあります。

バグを減らしたりエラー発生時の原因特定を容易にするためにも、不必要なPublic変数の使用は控えるようにするのがおすすめです。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次