Microsoft Access 掲示板

ファイル内で有効な変数

2 コメント
views
4 フォロー

初心者です。複数のフォームから色々なデータをExcelにエクスポートさせています。対象のExcelファイルは決まったフォルダーに集めています。
現在は各フォームのプロシージャにフルパスを下記の様に変数にしてフォームのコマンドボタンに記述してエクスポートを実行させています。これは問題なく動作してます。
  Dim Filepath As String, FileName As String, Expath As String
   ① Filepath = "C:\Users\user\Desktop[フォルダー名]\"
    ②  FileName = "[ファイル名]"
    ③ Expath = "C:\Program Files\Microsoft Office\Office12\excel.exe"
この①③は複数のフォームで共通なのでファイルで共有できないかなと思ったので投稿しました。(ファイル内すべての場所で有効)
そうしておけばPCが変わったりしても1ヶ所変更出来れば便利なので。
多分グローバル変数になると思うのですがプロシージャレベル変数しか使ってないので方法が分かりません。
・どこに記述したらいいのか
・各フォームでどう使うのか
初歩的な事の様な気がしますが教えて下さい(ネットで検索してもイマイチ理解できなくて)
宜しくお願いします。

beginner
作成: 2024/07/12 (金) 09:19:53
通報 ...
1
hiroton 2024/07/12 (金) 14:41:02 cda86@2ee8f

変数の適応範囲というものがあります。一般にスコープと言われます

スコープと可視性について

第108回.変数の適用範囲(スコープ,Private,Public)(エクセルの神髄 さん)

モジュールの先頭部分(プロシージャ外)にPublic宣言で変数を宣言すればどこからでも使える変数になります

宣言した後の使い方はほかの変数と同じです。ただし、パブリック変数は、プロシージャレベル変数として同名の変数を別途宣言することが可能なので、使用には注意が必要です

また、実行中に書き換えることのない値であれば変数ではなく定数で宣言するのが望ましいです

Public Const 共通保存フォルダ = "C:\Users\user\Desktop[フォルダー名]\"

宣言場所はどのモジュールでも変わりませんが、システム全体で共有されるものは、標準モジュールを追加して整理すると良いでしょう


ACCESSでこのようなデータを扱うなら、システム環境テーブルを作ってしまうのも手です

T_SYSENV

keyitem
共通保存フォルダC:\Users\user\Desktop[フォルダー名]\

テーブルに保存してあるデータはDLookup関数で参照できます。また、その機能をユーザー定義関数にしてしまえばそのほかの各モジュールで使う場合も使いやすくなります

Public Function getSysEnv(key As String)
    getSysEnv = DLookup("item", "T_SYSENV", "key='" & key & "'")
End Function
?getSysEnv("共通保存フォルダ")
C:\Users\user\Desktop[フォルダー名]\

テーブルに保存することによって、VBAを編集する必要がなくなる≒ランタイム環境でも(テーブルのデータを編集する機能を作っておけば)設定変更が可能になります

2
beginner 2024/07/12 (金) 15:40:57 ddfe5@79639

hirotonさん ありがとうございます。なるほど!テーブルに格納が簡単そうですね。全く思いつかないアイデアでした。試してみますね。