人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBSについて質問です。
ファイル更新の監理を行いたいと思っています。
そこで以下のプログラムをりようしましたが、カスタマイズしたいと思っております。
・更新された数だけポップアップされるので、
ポップアップを閉じたら一つのポップアップだけにしたい。
・更新者と更新時間をポップアップに表示したい
-------------------
ソースは別途

●質問者: japan-nan
●カテゴリ:ビジネス・経営 コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

-------------------
' 監視するファイルの設定
fil_path = "C:\Users\tar-t-05866f\Desktop\vbaテスト\1234.xlsx"
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
-------------------


1 ● braahmaNa
●300ポイント ベストアンサー

新たに何もインストールしないとこんな感じですね…
このBuiltinDocumentProperties.Itemプロパティ使うためには、
自分が対象のエクセルファイルを開いていないとエラーになるので強制的に開いています。
また、自分が対象ファイルを新たに開いたり閉じたりするとスクリプトからファイルへの接続が切られてしまいます。
この辺はちょっとどうにも出来なかったですね…

因みにネットワーク越しに他人が編集する場合は大丈夫です。
(ファイル削除、リネーム等のファイルの存在判定に関わる場合を除く)
また、ネットワーク越しに編集された場合にFileSystemObjectのDateLastModifiedを使うと、
正確な日時にならない場合が有るようなのでBuiltinDocumentPropertiesの値に変更しています。
なるべく元の形を残して編集はしていますので、
細かい挙動はjapan-nanさんの使いやすい様に編集して下さい。

新たにDsoっていうActiveXコンポーネント入れるともっとスマートにいけるかも知れません。
https://support.microsoft.com/ja-jp/kb/224351





' 監視するファイルの設定
fil_path = "C:\Users\tar-t-05866f\Desktop\vbaテスト\1234.xlsx"

Set fso = CreateObject("Scripting.FileSystemObject")

' ファイルが存在しなければ強制終了
If not fso.FileExists( fil_path ) Then
MsgBox fil_path & "が存在しません"
Set fso = Nothing
WScript.Quit()
End If

' excelファイルが開いている事が前提なので強制的にOpen
Set excel = CreateObject( "Excel.Application" )
excel.Workbooks.Open( fil_path )

' falseにするとexcel非表示
' 自分自身が編集しない(このファイルを新たに開かない)場合のみ
excel.Visible=true

' Workbookオブジェクト取得
Set excel_object = GetObject( fil_path )

' プロパティのキー名
key_last_author = "Last Author"
key_last_save_time = "Last Save Time"

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

Do
WScript.Sleep(1000) ' VBSの時
'Sleep 1000: DoEvents ' VBAの時
file_dtm2 = ""
If fso.FileExists(fil_path) Then
' (変更後)ファイルの更新日時・前回保存者の取得
last_author = excel_object.BuiltinDocumentProperties.Item( key_last_author )
file_dtm2 = excel_object.BuiltinDocumentProperties.Item( key_last_save_time )
End If
' 変更前後のファイル更新日時を比較
If file_dtm1 <> file_dtm2 Then
If file_dtm1 <> "" And file_dtm2 <> "" Then
MsgBox "変更されました" & vbcrlf & "更新者:" & last_author & vbcrlf & "更新日時:" & file_dtm2
ElseIf file_dtm1 <> "" Then
MsgBox "削除されました"
Else
MsgBox "追加されました"
End If
End If
' 変更後日時を変更前日時として設定
file_dtm1 = file_dtm2
Loop

Set fso = Nothing

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ