17.01.2018, 13:30
(Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2018, 13:40 von Phi.VBA.
Bearbeitungsgrund: Filter entfernt
)
@Igelbauer
vielleicht hilft es, vielleicht trägt es zur Verwirrung bei:
Der Code prüft alle Dateien und trägt Änderungen in ein Log-File.
In ein neues, mit den Sheets("Log") und den genannten Überschriften in das Verzeichnis kopieren (besser mit wenigen Dateien in einer Testumgebung)
Die Annahme ist, dass die UsedRange gleich sind, sonst muss weiterer Code in den "else"-Teil eingefügt werden.
Schaun wir mal ...
vielleicht hilft es, vielleicht trägt es zur Verwirrung bei:
Der Code prüft alle Dateien und trägt Änderungen in ein Log-File.
In ein neues, mit den Sheets("Log") und den genannten Überschriften in das Verzeichnis kopieren (besser mit wenigen Dateien in einer Testumgebung)
Code:
Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Public Function F_ASC_ANS(ByVal Text As String) As String
OemToCharA Text, Text
F_ASC_ANS = Text
End Function
'Sheets("Log"): Datum, Zelle, alt, neu, User (headings in Zeile 1)
Sub Loggen()
Dim WBa As Workbook, WBn As Workbook
Dim LC As Range
Dim rLog As Long
Dim sPath As String
sPath = ThisWorkbook.Path & "\"
Fi = Split(F_ASC_ANS(CreateObject("wscript.shell").exec("cmd /c Dir """ & sPath & "*.xls?"" /b/od").stdout.readall), vbCrLf)
'Fi = Filter(Fi, ThisWorkbook.Name, False) 'aus sonst leerem WB nicht notwendg
rLog = Sheets("Log").Cells(Rows.Count, 1).End(xlUp).Row + 1
For f = 0 To UBound(Fi) - 1
Debug.Print Fi(f), Fi(f + 1)
Set WBa = Workbooks.Open(sPath & Fi(f))
Set WBn = Workbooks.Open(sPath & Fi(f + 1))
With WBn.Sheets(1).UsedRange
If WBa.Sheets(1).UsedRange.Address = .Address Then
Set LC = .SpecialCells(11)
For i = 1 To LC.Row
For j = 1 To LC.Column
If .Cells(i, j) <> WBa.Sheets(1).Cells(i, j) Then
ThisWorkbook.Sheets("Log").Cells(rLog, 1) = .Parent.Parent.BuiltinDocumentProperties("Last save time").Value
ThisWorkbook.Sheets("Log").Cells(rLog, 2) = .Cells(i, j).Address
ThisWorkbook.Sheets("Log").Cells(rLog, 3) = WBa.Sheets(1).Cells(i, j)
ThisWorkbook.Sheets("Log").Cells(rLog, 4) = .Cells(i, j)
ThisWorkbook.Sheets("Log").Cells(rLog, 5) = .Parent.Parent.BuiltinDocumentProperties("Last Author").Value
rLog = rLog + 1
End If
Next j
Next i
Else
MsgBox "unterschiedliche UsedRange"
End If
End With
WBa.Close 0
WBn.Close 0
Next f
End Sub
Die Annahme ist, dass die UsedRange gleich sind, sonst muss weiterer Code in den "else"-Teil eingefügt werden.
Schaun wir mal ...