今回のお題は、ディレクトリの特定の仕方について。
Accessで処理するファイルを、ある場所、具体的にはユーザープロファイルの”ダウンロード”フォルダからアプリのディレクトリに移動したい。
ただ、”ダウンロード”フォルダはログインしているユーザーによって絶対パスが変わってくる。それをどうするか?
今回の場合、ユーザーのリテラシーがそれほど高くなく、ネットからダウンロードされたファイルを、ユーザー自身がファイル選択ダイアログから選んで指示するのは避ける、という判断となった。
一応、ネットからダウンロードされるファイルの保存先はユーザー別の”ダウンロード”フォルダ、という事は保障される前提。
ダウンロードされるファイル名は名前付けルールにそって、識別子のお尻にタイムスタンプが付く。
ただ、Access側での処理のタイミングの問題で、同時に複数のダウンロードファイルを処理するケースも想定された。
個人的には、バッチファイルを同期でアクセスから実行して…、で良いんじゃない?と思った。
それなら環境変数でユーザープロファイルのパスが取れるから。
でも他からの判断でアクセス内で完結させる方法をとる事となった。
で、結局はWSHの ExpandEnvironmentStrings メソッドを使う事にした。
このメソッドは環境変数(%XXXX%)文字列をあたえるとそれの展開結果を返してくれる。
なんで、ExpandEnvironmentStrings("%userprofile%")とすると、ログインユーザーのユーザープロファイルパスが帰ってくる。
なお、これをAccessで使うには参照設定として「Windows Script Host Object Model」 を追加しないといけない。
また、オブジェクトを使うにはアーリーバインディングで書く必要がある事に注意。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function file_move() As String
Const cnsDEST = "C:\宿泊予約システム\" ' 先フォルダ(右端\必須)
Const cnsFileName = "\Downloads\reserve_*.csv" 'コピー元ファイル名 ワイルドカード
Dim objFSO As FileSystemObject ' FSO
Dim strSOUR As String 'コピー元フルパス
'WScript.Shell を使用
'参照設定:Windows Script Host Object Model の追加が必要
'アーリーバインディング
Dim wsh As IWshRuntimeLibrary.WshShell
Set wsh = New IWshRuntimeLibrary.WshShell
'コピー元フルパスの編集
strSOUR = wsh.ExpandEnvironmentStrings("%userprofile%") & cnsFileName
Set objFSO = New FileSystemObject
' FSOによるファイルコピー
objFSO.MoveFile strSOUR, cnsDEST
Set objFSO = Nothing
Set wsh = Nothing
MsgBox "ファイルのコピーが完了しました", vbInformation
End Function
Accessで処理するファイルを、ある場所、具体的にはユーザープロファイルの”ダウンロード”フォルダからアプリのディレクトリに移動したい。
ただ、”ダウンロード”フォルダはログインしているユーザーによって絶対パスが変わってくる。それをどうするか?
今回の場合、ユーザーのリテラシーがそれほど高くなく、ネットからダウンロードされたファイルを、ユーザー自身がファイル選択ダイアログから選んで指示するのは避ける、という判断となった。
一応、ネットからダウンロードされるファイルの保存先はユーザー別の”ダウンロード”フォルダ、という事は保障される前提。
ダウンロードされるファイル名は名前付けルールにそって、識別子のお尻にタイムスタンプが付く。
ただ、Access側での処理のタイミングの問題で、同時に複数のダウンロードファイルを処理するケースも想定された。
個人的には、バッチファイルを同期でアクセスから実行して…、で良いんじゃない?と思った。
それなら環境変数でユーザープロファイルのパスが取れるから。
でも他からの判断でアクセス内で完結させる方法をとる事となった。
で、結局はWSHの ExpandEnvironmentStrings メソッドを使う事にした。
このメソッドは環境変数(%XXXX%)文字列をあたえるとそれの展開結果を返してくれる。
なんで、ExpandEnvironmentStrings("%userprofile%")とすると、ログインユーザーのユーザープロファイルパスが帰ってくる。
なお、これをAccessで使うには参照設定として「Windows Script Host Object Model」 を追加しないといけない。
また、オブジェクトを使うにはアーリーバインディングで書く必要がある事に注意。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function file_move() As String
Const cnsDEST = "C:\宿泊予約システム\" ' 先フォルダ(右端\必須)
Const cnsFileName = "\Downloads\reserve_*.csv" 'コピー元ファイル名 ワイルドカード
Dim objFSO As FileSystemObject ' FSO
Dim strSOUR As String 'コピー元フルパス
'WScript.Shell を使用
'参照設定:Windows Script Host Object Model の追加が必要
'アーリーバインディング
Dim wsh As IWshRuntimeLibrary.WshShell
Set wsh = New IWshRuntimeLibrary.WshShell
'コピー元フルパスの編集
strSOUR = wsh.ExpandEnvironmentStrings("%userprofile%") & cnsFileName
Set objFSO = New FileSystemObject
' FSOによるファイルコピー
objFSO.MoveFile strSOUR, cnsDEST
Set objFSO = Nothing
Set wsh = Nothing
MsgBox "ファイルのコピーが完了しました", vbInformation
End Function
コメント
コメントを投稿