ms accessについてお尋ねします。
他の人が作成したaccessのシステムのファイルを学習しているのですが、
そのファイル内のフォームに関連付けられたvbaの内部に
そのファイル内では宣言されていない変数が使われているのですが、
そのvbaプロジェクト内のファイルすべてから参照できるような
グローバル変数の役割をもつものを
宣言する方法などはあるのでしょうか?
慣例として、
そのようなグローバルの意味合いをもつ変数を宣言するファイルは
決まっているのでしょうか?
↓
はい、Microsoft Access の VBA で
**グローバル変数** を宣言する方法はいくつかあります。
### 1. **標準モジュールで `Public` 変数を宣言する**
最も一般的な方法は、
標準モジュール(`Module1` など)を作成し
、その中で `Public` キーワードを使って変数を宣言することです。
#### **例:グローバル変数の宣言**
1. **VBAエディタを開く**(`Alt` + `F11`)
2. **標準モジュールを作成**(「挿入」→「標準モジュール」)
3. **以下のように記述**
```vba
' 標準モジュール (例: Module1)
Public gUserName As String
Public gUserID As Integer
```
4. **他のフォームやモジュールから使用**
```vba
gUserName = "Yamada"
MsgBox "現在のユーザー: " & gUserName
```
---
### 2. **`Public` 変数を `Class Module` に持たせる**
クラスモジュールに変数を持たせ、
それを **Singleton(単一インスタンス)** にする方法もあります。
```vba
' クラスモジュール (例: GlobalVariables)
Public gUserName As String
Public gUserID As Integer
```
通常、`Public` 変数を直接使うより、
**プロパティを定義してアクセス制限をかける** のが良い方法です。
---
### 3. **AccessのTempVarsを使う**
VBAの `TempVars` コレクションを使うと、変数をグローバルに管理できます。
```vba
' 値の設定
TempVars.Add "UserName", "Yamada"
' 値の取得
MsgBox TempVars("UserName")
```
この方法は、`Public` 変数と違って **Accessを閉じると消える** ため、
セッション変数のような使い方ができます。
---
### **慣例としてのグローバル変数の管理方法**
1. **標準モジュール(`modGlobal`、`modMain` など)に `Public` 変数をまとめる**
- `modGlobal` という標準モジュールを作成し、
その中でグローバル変数を定義することが多い。
- 例:
```vba
' modGlobal モジュール
Public gUserID As Integer
Public gCompanyName As String
```
2. **フォームやレポートには直接グローバル変数を使わず、
関数経由でアクセスする**
- 例:
```vba
Function GetUserID() As Integer
GetUserID = gUserID
End Function
```
3. **可能なら `TempVars` を利用**
- Access の `TempVars` は、VBA 変数と異なり、
アクセス中ずっと保持されるので便利。
---
### **結論**
- **一般的には標準モジュール(`modGlobal` など)で `Public` 変数を宣言**
- **セッション変数的な用途なら `TempVars` も選択肢**
- **システムの規模が大きくなるならクラスモジュールを活用**
もし Access のファイルを解析していて、
どこで変数が宣言されているかわからない場合は、
**VBA の「検索機能」**(`Ctrl` + `F`)で変数名を検索すると、
どこで宣言されているか見つかることがあります。
コメント
コメントを投稿