|
ファイルの同期をとる。ということなら、更新日時の新しい方から古い方へコピー
するのが定石でしょう。例えばこのようなコードで出来ます。
Sub MyFile_Update()
Dim MyF As String, MyF2 As String, Pmt As String
Dim WshShell As Object, FSO As Object
Dim Dt1 As Date, Dt2 As Date
Dim Ans As Integer
Const Fol As String = _
"\\CP1\F\Documents and Settings\Administrator\My Documents\Exl_Files"
'ネットワーク上の保存先フォルダーのパス
Set WshShell = CreateObject("WScript.Shell")
On Error Resume Next
WshShell.CurrentDirectory = Fol
If Err.Number <> 0 Then
MsgBox "ネットワークに繋がっていません", 48
Set WshShell = Nothing: Exit Sub
End If
On Error GoTo 0
With Application
MyF = .GetOpenFilename
If MyF = "False" Then GoTo ELine
MyF2 = .DefaultFilePath & "\" & Dir(MyF)
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(MyF2) = False Then
MsgBox "その名前のファイルはこのマシンに存在しません", 48
GoTo ELine
End If
Dt1 = FSO.GetFile(MyF).DateLastModified
Dt2 = FSO.GetFile(MyF2).DateLastModified
Pmt = "選択したファイルの更新日時" & vbLf & Dt1 & vbLf & _
"こちらのマシンにあるファイルの更新日時" & vbLf & Dt2 & vbLf & vbLf
If Dt1 > Dt2 Then
Ans = MsgBox(Pmt & "ネットワーク上のファイルをこちらのファイル" _
& vbLf & "にコピーしますか", 36)
If Ans = 6 Then FSO.CopyFile MyF, MyF2, True
ElseIf Dt1 < Dt2 Then
Ans = MsgBox(Pmt & "こちらのファイルをネットワーク上のファイル" _
& vbLf & "にコピーしますか", 36)
If Ans = 6 Then FSO.CopyFile MyF2, MyF, True
Else
MsgBox "更新済みです", 64
End If
ELine:
Set WshShell = Nothing: Set FSO = Nothing
End Sub
ダイアログで選択したファイルと同じ名前のファイルが、こちらのマシンの
"通常エクセルファイルを開く"フォルダーに存在しているか、チェックしています。
なお「データを比較して」ということなら、双方のファイルに作業シートを挿入
しておき、A1:E12 の範囲にリンク式を埋めて値を引っ張り、COUNTA関数で入力数
を比べる、などが考えられます。
|
|