Würde ich in seine Teilprobleme zerlegen.
* Dummy_Aufruf kümmert sich um das Löschen des importierten Blatts, falls ein Abgleich möglich war
* WksMatch führt den Abgleich durch (Datenzeile 5 kopieren)
* WksCompare führt den Vergleich / die Suche nach dem richtigen Blatt durch
Option Explicit
Sub Dummy_Aufruf()
Dim wks As Excel.Worksheet
If WksMatch(ActiveSheet, ActiveWorkbook, wks) Then
' Application.DisplayAlerts = False
ActiveSheet.Delete
' Application.DisplayAlerts = True
' wks.Activate
End If
End Sub
Function WksMatch(Optional ByVal Source As Excel.Worksheet, Optional ByVal CompareWith As Excel.Workbook, Optional ByRef Match As Excel.Worksheet) As Boolean
If Source Is Nothing Then Set Source = ActiveSheet 'gehe hier einfachhalber davon aus, dass ActiveSheet ein Tabellenblatt ist
If CompareWith Is Nothing Then Set CompareWith = ActiveWorkbook
Dim wks As Excel.Worksheet
Dim i As Long
For Each wks In CompareWith.Worksheets
If Not wks Is Source Then
If WksCompare(Source, wks, 1) Then
' Debug.Print "'"; Source.Name; "' equal to '"; wks.Name; "'"
Source.Rows(5).Copy wks.Cells(wks.Rows.Count, "A").End(xlUp).Offset(1) 'unter die letzte Zeile kopieren; über Spalte A ermittelt
Set Match = wks
WksMatch = True
Exit Function
End If
End If
Next
End Function
Private Function WksCompare(ByVal Worksheet1 As Excel.Worksheet, ByVal Worksheet2 As Excel.Worksheet, ByVal Row As Long) As Boolean
Dim c As Variant
' c() = {COLUMN_MAX, COLUMN_MAX_WKS1,COLUMN_MAX_WKS2}
c = Array(0, Worksheet1.Cells(Row, Worksheet1.Columns.Count).End(xlToLeft).Column, _
Worksheet2.Cells(Row, Worksheet2.Columns.Count).End(xlToLeft).Column)
c(0) = WorksheetFunction.Max(c(1), c(2))
'wenn sich die Spalten-Anzahl beider Tabellen unterscheidet,
'kann man hier theoretisch/faktisch bereits aufhören - keine Übereinstimmung mgl.
If c(1) <> c(2) Then Exit Function
Dim i As Long
For i = 1 To c(0)
If Worksheet1.Cells(Row, c(1)).Value <> Worksheet2.Cells(Row, c(2)).Value Then
Exit Function
End If
Next
WksCompare = True
End Function
LG
|