現在「トップフォーム」にてボタンクリックでダイアログを使い、任意のフォルダパスを格納できるようにしています。これは「トップテーブル」に入るようにしました。
そして、「案件フォーム」でボタンをクリックするとフォルダパス+「各レコードごとに生成したファイル名」でリンクを繋ぎ、ファイルの移動に役立てたいと思っています。
そこで質問ですが、
フォルダパスはやはり、クエリで繋いで全てのレコードに1つずつ紐づけないといけないのでしょうか。
リンクを作るのはVBAなのですが、フォルダパスをVBAで一括で指定することができますでしょうか。
訳の分からない質問をしていたら申し訳ありません。
このファイルの移動はどのようにしてますか。
VBAなら、クエリで生成しなくても、VBAのコードで生成すればいいだけでは。
ばっちりです!こういうときのためのDLookupなのですね…忘れないようにしなければ…
ところで、やはりフォルダパスはテーブルに格納する必要がありますよね。
このテーブルはこのフォルダパスのためにしか存在していないのですが、アクセスではテーブル以外にデータを入れる場所はありませんよね。
厳密な話をしだすとアレですが、一時的に使うだけなら
DLookupする代わりにフォルダパスを指定するダイアログをこのタイミングで呼び出す(VBAのみでフォルダパスを扱う)
案件フォームに非連結の「フォルダパス」テキストボックスを設置して、フォルダパス格納機能も案件フォームに設置する
フォルダパス取得を「トップフォーム」でやりたいのならフォルダパス取得部分は上記同様にトップフォームに作って、案件フォームからトップフォームを参照する
など、アクセスを終了したら保存しなくてもいいデータならテーブルにもつ必要はないですね
なるほど、よくわかりました。
トップに置きたいのですが、閉じる可能性があるので今回はやめておこうと思いますが、今後の参考になりました!
ありがとうございます!!
マクロの「一時変数」というのがあります。
"SetTempVar/一時変数の設定" マクロ アクション - Access
VBAからは、TempVars オブジェクト として参照できます。
TempVars オブジェクト (Access) | Microsoft Docs
下記のような感じで使えます。
TempVars!FolderPath
の部分はTempVars("FolderPath")
とすることもできます。TempVars(0) とインデックスで参照することなできます。データベースファイルを閉じるまでは、使用できます。
マクロで参照したり、フォーム、レポートのコントロールソースからも下記のような感じで参照できます。
=[TempVars]![FolderPath]
また、クエリからも [TempVars]![FolderPath] という式で参照できます。
なかなか便利な機能だとおもいます。
まとめると、
「トップフォーム」を閉じない(不要の場合は、閉じずに非表示にておく)なら、「トップフォーム」に表示のテキストボックスを配置してそこに格納しておく。
「トップフォーム」を閉じる場合があるなら、TempVars に格納しておく。
データベースファイルを閉じても、保存しておきたい。次に開いたとに前回のものを参照したいという場合は、テーブルに格納しておく。
というように使い分けるといいでしょう。
あとは、VBAでグローバルな変数を用意するとかですかね
「案件フォーム」のレコードソースで「
ファイルパス: [TempVars]![FolderPath]&ファイル名
」なフィールドを用意しておけるとかなかなか良さげですね高度な技を教えていただきありがとうございます!!
大変勉強になりました。今後も使える技で、とても助かります。
>「トップフォーム」を閉じない(不要の場合は、閉じずに非表示にておく)
ここらへんの設計は後回しにしているので、いずれ質問させていただくかもしれません。。