VBA:ファイル更新日時をチェック・比較し、ローカルにサーバーからダウンロードする方法
1.やりたいこと
ツールで利用するAccessDB、CSV、Excelなどのファイルをサーバーからダウンロードする際に、すでにローカルに保存しているファイルの更新日時と比較し、ローカルが古い場合のみダウンロードをしたい場合があります。
2.サンプルコード
以下のサンプルコードを実行すると、ローカルにファイルがなければ更新日時の比較する必要がないのでダウンロードが開始されます。
ローカルにファイルがある場合は、更新日時を比較し、ローカル側が古ければダウンロードするかどうかを聞いてくるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
Function chkUpdateTimeAndDownload() Dim 更新日時_Local As Date Dim 更新日時_Server As Date Dim FProf As File Dim FSO_sub As FileSystemObject Dim FName As String Dim Path_Local As String Dim Path_Server As String Path_Local = "C:\Users\xxxx\テストデータ\Local\サンプルDB.accdb" Path_Server = "\\サーバー\Users\xxxx\Server\サンプルDB.accdb" FName = Dir(Path_Local) 'サーバーのファイルの有無チェック。なければ止める。' If Dir(Path_Server) = "" Then MsgBox "サーバーにファイルがありません" Exit Function End If '比較対象のファイル情報取得' Set FSO_sub = New FileSystemObject Set FProf = FSO_sub.GetFile(Path_Server) 更新日時_Server = FProf.DateLastModified If Dir(Path_Local) <> "" Then 更新日時_Local = FSO_sub.GetFile(Path_Local).DateLastModified If 更新日時_Local = 更新日時_Server Then '①最新ファイルがLocalにあるので何もしない。' ElseIf 更新日時_Local > 更新日時_Server Then '②最新ファイルがLocalにあるので何もしない。' Else '③ローカルにあるファイルを更新するかどうか確認' If MsgBox(FName & "を最新のものに更新しますか?", vbYesNo) = vbYes Then '④更新開始' FSO_sub.CopyFile Path_Server, Path_Local, True Else '⑤更新ファイルがあるけど更新しない。' End If End If Else '⑥ローカルにないのでダウンロード開始' FSO_sub.CopyFile Path_Server, Path_Local, True End If Set FSO_sub = Nothing Set FProf = Nothing End Function |
◆関連記事

AccessVBA:【DoCmd】【TransferSpreadsheetメソッド】Excelの取込み(インポート)と出力(エクスポート)
【DoCmd】「TransferSpreadsheet」を使ったExcelの入力(インポート)と出力(エクスポート)の方法について

VBA:【ADO】【取込み】ExcelファイルのAccessテーブルへのインポート・取込み「SQL文」
【VBA】ExcelファイルのAccessテーブルへのインポート・取込み方法。「ADO」と「SQL文」利用。

VBA:【ADO】【取込み】CSVファイルのAccessテーブルへのインポート・取込み「SQL文」
【VBA】CSVファイルのAccessテーブルへのインポート・取込み方法。「ADO」と「SQL文」利用。