NonSoft

VBSやVBAでファイルの変更を監視する方法


 ち〜な〜み〜に〜

VBS(VB SCRIPT/WSH)やVBAで手軽にファイルの変更を監視する方法をご紹介します。

ファイル監視とは、指定のファイルに対し更新日時の変更やファイルの追加、削除を監視し、
通知(メッセージ表示、アイコン点滅、メール送信)や指定プログラム実行をする事を意味します。

このサンプルでは変更/追加/削除の有無を通知(メッセージ表示)します。

ファイル監視関係のその他のサンプルソースはこちらです。
VBSやVBAでフォルダの変更を監視する方法
VBSやVBAでフォルダ比較し差分を出力する方法
VBSやVBAでファイル比較し差分を出力する方法

フォルダ監視(ファイル監視)関係のその他のツールやサンプルソースはこちらです。
ファイル監視/フォルダ監視(ツール&サンプル)
ファイル比較/フォルダ比較(ツール&サンプル)


★ファイル監視サンプルソース
' --------------------------------------------------------------------
' VBAの時はSleepのAPI宣言(Declare)が必要
' Private Declare Sub Sleep Lib "kernel32" (ByVal dwMs As Long)
' --------------------------------------------------------------------
' 監視するファイルの設定
fil_path = "D:\Temp\test\a.txt"

Set fso = CreateObject("Scripting.FileSystemObject")

' (変更前)ファイルの更新日時の取得
file_dtm1 = ""
If fso.FileExists(fil_path) Then
    file_dtm1 = fso.GetFile(fil_path).DateLastModified
End If

Do
    WScript.Sleep(1000)   ' VBSの時
    'Sleep 1000: DoEvents ' VBAの時

    ' (変更後)ファイルの更新日時の取得
    file_dtm2 = ""
    If fso.FileExists(fil_path) Then
        file_dtm2 = fso.GetFile(fil_path).DateLastModified
    End If

    ' 変更前後のファイル更新日時を比較
    If file_dtm1 <> file_dtm2 Then
        If file_dtm1 <> "" And file_dtm2 <> "" Then
            MsgBox "変更されました"
        ElseIf file_dtm1 <> "" Then
            MsgBox "削除されました"
        Else
            MsgBox "追加されました"
        End If
    End If

    ' 変更後日時を変更前日時として設定
    file_dtm1 = file_dtm2
Loop

Set fso = Nothing
' --------------------------------------------------------------------