Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellenvergl.: Makro funktioniert nicht

Tabellenvergl.: Makro funktioniert nicht
21.04.2020 08:48:18
Axel
Hallo zusammen,
ich habe ein Makro erstellt, um Unterschiede bei zwei Tabellen zu identifizieren. Es funktioniert auch.
Heute habe ich zwei Ausleitungen aus Access vergleichen wollen und das Makro macht gar nichts.
Ich habe auch schon versucht, Variablen als Variant statt Integer zu deklarieren, aber der Code scheint den wesentlichen Teil der Zellvergleiche zu überspringen.
Woran kann das denn liegen?
Hier die Datei:
https://www.herber.de/bbs/user/136917.xlsm
Ich drehe noch durch....
Vielen Dank schon einmal vorab für eure Hilfe.
Axel

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 09:03:27
Hajo_Zi
Hallo Axel,

If objws1Row.Count > objws2Row.Count Then

der erste Werete ist größer als der 2.
DDas kann man auchg im Einzelschritt feststellen.

AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 09:19:08
Axel
Hallo Hajo,
ja das hatte ich gesehen, dass das Makro da abbricht.
Wie müsste man das denn anders codieren, damit das Makro weiterläuft und warum funktioniert es normalerweise, nur in diesem Fall nicht?
Danke vorab
Axel
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 12:09:28
Hajo_Zi
da kann ichg nicht helfen, Deine 2 Tabellen haben nur mal diese auzsgefüllten Zeilen.
Schreibe in die Zweite mehr Datensätze.
Gruß Hajo
Anzeige
AW: Corona-Blues
21.04.2020 09:08:19
Fennek
Hallo,
ungetestet:

sub Sheets_vergleich()
sheets(1).activate
for i = 1 to cells(rows.count, 1).end(xlup).row
for j = 1 to cells(1, columns.count).end(xltoleft).column
if sheets(1).cells(i, j)  sheets(2).cells(i, j) then
sheets(1).cells(i, j).interior.color = vbyellow
endif
next j
next i
end sub
Jeden Kommentar wie "welches Lehrbuch hattest Du?" lasse ich mal weg.
mfg
(kann Tippfehler enthalten)
AW: Corona-Blues
21.04.2020 09:21:26
Axel
Hallo Fennek,
vielen Dank für Deinen Beitrag.
Ja, Unterschiede werden mit Deiner Lösung in Tabelle 1 angezeigt, aber nicht in Tabelle 2 und es werden auch keine Zellkommentare eingefügt.
Ja, ich habe ein Buch, aus dem ich einen Teil des Kodes genommen habe, daran ist ja nichts verwerflich.
Vielleicht kannst Du mir bei der Lösung des Problems bei dem bestehenden Code helfen?
Vielen Dank vorab
Axel
Anzeige
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 09:19:45
Nepumuk
Hallo Axel,
deine UserRange's sind viel größer als die Daten darin. Test mal so:
Option Explicit

Sub ZweiTabellenblätterVergleichen()
    
    Dim wb As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim wks As Worksheet
    Dim lngws1Row As Long, lngws1Col As Long
    Dim lngws2Row As Long, lngws2Col As Long
    Dim intMaxRow As Long, intMaxCol As Long
    Dim intCol As Long, intRow As Long
    Dim strCompWS1 As String, strCompWS2 As String
    
    'Referenzierungen
    Set ws1 = Worksheets(1)
    Set ws2 = Worksheets(2)
    With ws1
        lngws1Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws1Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    With ws2
        lngws2Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws2Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    
    'Bildschirmaktualisierung und Warnungen ausschalten
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    
    'Eventuelle Farben und Kommentare in Tabelle1 löschen
    With ws1.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Eventuelle Farben und Kommentare in Tabelle2 löschen
    With ws2.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Maximale Zeilenzahl ermitteln
    If lngws1Row > lngws2Row Then
        intMaxRow = lngws1Row
    Else
        intMaxRow = lngws2Row
        
        'Maximale Spaltenzahl ermitteln
        If lngws1Col > lngws2Col Then
            intMaxCol = lngws1Col
        Else
            intMaxCol = lngws2Col
        End If
        
        'Jede Zelle der beiden Tabellenblätter vergleichen
        For intCol = 1 To intMaxCol
            For intRow = 1 To intMaxRow
                strCompWS1 = ws1.Cells(intRow, intCol)
                strCompWS2 = ws2.Cells(intRow, intCol)
                If strCompWS1 <> strCompWS2 Then
                    
                    'Unterschiedliche Einträge in Tabelle1
                    With ws1
                        'Kommentar einfügen
                        .Cells(intRow, intCol).AddComment strCompWS2
                        'Kommentierte Zellen markieren
                        .Cells.SpecialCells _
                            (xlCellTypeComments).Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                    End With
                    
                    'Unterschiedliche Einträge in Tabelle2
                    With ws2
                        'Kommentar einfügen
                        .Cells(intRow, intCol).AddComment strCompWS1
                        'Kommentierte Zellen markieren
                        .Cells.SpecialCells _
                            (xlCellTypeComments).Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                    End With
                    
                End If
            Next intRow
        Next intCol
        
        'Bildschirmaktualisierung und Warnungen einschalten
        With Application
            .ScreenUpdating = True
            .DisplayAlerts = True
        End With
        
        'Objekte wieder freigeben
        Set ws1 = Nothing
        Set ws2 = Nothing
        
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 09:24:47
Axel
Hallo Nepumuk,
danke für Deinen Beitrag.
Leider funktioniert es auch nicht.
Ich denke, Hajo hatte den richtigen Hinweis, ich kann das nur nicht im Code umsetzen.
Vielen Dank!
Axel
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 09:46:31
Axel
Hi Nepumuk,
hm... ja jetzt geht es. Ich hab den Code mal in die Originaldatei kopiert, da funktioniert es wieder nicht.
Liegt es vielleicht daran, dass im Tabellenblatt 1 mehr Zeilen als in Tabellenblatt 2 befüllt sind?
Gruß
Axel
Anzeige
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 09:50:26
Nepumuk
Hallo Axel,
teste mal damit:
Option Explicit

Sub ZweiTabellenblätterVergleichen()
    
    Dim wb As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim wks As Worksheet
    Dim lngws1Row As Long, lngws1Col As Long
    Dim lngws2Row As Long, lngws2Col As Long
    Dim intMaxRow As Long, intMaxCol As Long
    Dim intCol As Long, intRow As Long
    Dim strCompWS1 As String, strCompWS2 As String
    
    'Referenzierungen
    Set ws1 = Worksheets(1)
    Set ws2 = Worksheets(2)
    With ws1
        lngws1Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws1Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    With ws2
        lngws2Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws2Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    
    'Bildschirmaktualisierung und Warnungen ausschalten
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    
    'Eventuelle Farben und Kommentare in Tabelle1 löschen
    With ws1.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Eventuelle Farben und Kommentare in Tabelle2 löschen
    With ws2.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Maximale Zeilenzahl ermitteln
    If lngws1Row > lngws2Row Then
        intMaxRow = lngws1Row
    Else
        intMaxRow = lngws2Row
    End If
    
    'Maximale Spaltenzahl ermitteln
    If lngws1Col > lngws2Col Then
        intMaxCol = lngws1Col
    Else
        intMaxCol = lngws2Col
    End If
    
    'Jede Zelle der beiden Tabellenblätter vergleichen
    For intCol = 1 To intMaxCol
        For intRow = 1 To intMaxRow
            strCompWS1 = ws1.Cells(intRow, intCol)
            strCompWS2 = ws2.Cells(intRow, intCol)
            If strCompWS1 <> strCompWS2 Then
                
                'Unterschiedliche Einträge in Tabelle1
                With ws1
                    'Kommentar einfügen
                    .Cells(intRow, intCol).AddComment strCompWS2
                    'Kommentierte Zellen markieren
                    .Cells.SpecialCells _
                        (xlCellTypeComments).Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                End With
                
                'Unterschiedliche Einträge in Tabelle2
                With ws2
                    'Kommentar einfügen
                    .Cells(intRow, intCol).AddComment strCompWS1
                    'Kommentierte Zellen markieren
                    .Cells.SpecialCells _
                        (xlCellTypeComments).Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                End With
                
            End If
        Next intRow
    Next intCol
    
    'Bildschirmaktualisierung und Warnungen einschalten
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
    
    'Objekte wieder freigeben
    Set ws1 = Nothing
    Set ws2 = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 10:40:54
Axel
Hallo Nepumuk,
ich hab beim ersten mal Excel nach 12 Minuten abgeschossen und jetzt läuft das Makro auch schon wieder ewig.
Insgesamt sind es knapp 9000 Zeilen und 6 Spalten, die verglichen werden. Ich werd mal nen Kaffee trinken gehen und dann noch mal nachschauen, ob es funktioniert hat.
Ich habe noch eine andere Frage / Bitte:
Wie kann ich eine Msg Box einfügen, die erscheint, wenn es keine Unterschiede gibt?
Irgendwo in der Schleife muss doch dann der Ausstieg kommen: msgbox.show "Es wurden keine Unterschiede gefunden".
Vielen Dank noch einmal
Axel
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 11:08:07
Nepumuk
Hallo Axel,
ich habe es mit 2x1000 Zeilen getestet. Braucht 0,1 Sekunde.
Schau mal bei dir ob es so schneller ist?
Option Explicit

Sub ZweiTabellenblätterVergleichen()
    
    Dim wb As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim wks As Worksheet
    Dim lngws1Row As Long, lngws1Col As Long
    Dim lngws2Row As Long, lngws2Col As Long
    Dim intMaxRow As Long, intMaxCol As Long
    Dim intCol As Long, intRow As Long
    Dim strCompWS1 As String, strCompWS2 As String
    
    'Referenzierungen
    Set ws1 = Worksheets(1)
    Set ws2 = Worksheets(2)
    
    With ws1
        lngws1Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws1Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    With ws2
        lngws2Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws2Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    
    'Bildschirmaktualisierung ausschalten
    Application.ScreenUpdating = False
    
    'Eventuelle Farben und Kommentare in Tabelle1 löschen
    With ws1.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Eventuelle Farben und Kommentare in Tabelle2 löschen
    With ws2.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Maximale Zeilenzahl ermitteln
    If lngws1Row > lngws2Row Then
        intMaxRow = lngws1Row
    Else
        intMaxRow = lngws2Row
    End If
    
    'Maximale Spaltenzahl ermitteln
    If lngws1Col > lngws2Col Then
        intMaxCol = lngws1Col
    Else
        intMaxCol = lngws2Col
    End If
    
    'Jede Zelle der beiden Tabellenblätter vergleichen
    For intCol = 1 To intMaxCol
        For intRow = 1 To intMaxRow
            strCompWS1 = ws1.Cells(intRow, intCol)
            strCompWS2 = ws2.Cells(intRow, intCol)
            If strCompWS1 <> strCompWS2 Then
                
                'Unterschiedliche Einträge in Tabelle1
                With ws1.Cells(intRow, intCol)
                    'Kommentar einfügen
                    .AddComment strCompWS2
                    'Kommentierte Zellen markieren
                    .Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                End With
                
                'Unterschiedliche Einträge in Tabelle2
                With ws2.Cells(intRow, intCol)
                    'Kommentar einfügen
                    .AddComment strCompWS1
                    'Kommentierte Zellen markieren
                    .Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                End With
            End If
        Next intRow
    Next intCol
    
    'Bildschirmaktualisierung einschalten
    Application.ScreenUpdating = True
    
    'Objekte wieder freigeben
    Set ws1 = Nothing
    Set ws2 = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 11:19:54
Axel
Nepumuk,
DAS geht jetzt. Ich musste Excel vorher wieder abschießen, "Keine Rückmeldung" mit Laufzeit Fehlermeldung, irgendwas passte nicht mit Range...
Du, wäre das zu unverschämt nach einer Lösung zu fragen, wie und wo man im Code einen Abzweig schafft, wenn es keine Unterschiede gibt (msgBox: "Es wurden keine Unterschiede gefunden"
Danke und viele Grüße
Axel
AW: Tabellenvergl.: Makro funktioniert nicht
21.04.2020 11:27:25
Nepumuk
Hallo Axel,
teste mal:
Option Explicit

Sub ZweiTabellenblätterVergleichen()
    
    Dim wb As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim wks As Worksheet
    Dim lngws1Row As Long, lngws1Col As Long
    Dim lngws2Row As Long, lngws2Col As Long
    Dim intMaxRow As Long, intMaxCol As Long
    Dim intCol As Long, intRow As Long
    Dim strCompWS1 As String, strCompWS2 As String
    Dim blnDifferentFound As Boolean
    
    'Referenzierungen
    Set ws1 = Worksheets(1)
    Set ws2 = Worksheets(2)
    
    With ws1
        lngws1Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws1Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    With ws2
        lngws2Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngws2Col = .Cells(2, .Columns.Count).End(xlToLeft).Column
    End With
    
    'Bildschirmaktualisierung ausschalten
    Application.ScreenUpdating = False
    
    'Eventuelle Farben und Kommentare in Tabelle1 löschen
    With ws1.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Eventuelle Farben und Kommentare in Tabelle2 löschen
    With ws2.Cells
        .Interior.Color = xlNone
        .ClearComments
    End With
    
    'Maximale Zeilenzahl ermitteln
    If lngws1Row > lngws2Row Then
        intMaxRow = lngws1Row
    Else
        intMaxRow = lngws2Row
    End If
    
    'Maximale Spaltenzahl ermitteln
    If lngws1Col > lngws2Col Then
        intMaxCol = lngws1Col
    Else
        intMaxCol = lngws2Col
    End If
    
    'Jede Zelle der beiden Tabellenblätter vergleichen
    For intCol = 1 To intMaxCol
        For intRow = 1 To intMaxRow
            strCompWS1 = ws1.Cells(intRow, intCol)
            strCompWS2 = ws2.Cells(intRow, intCol)
            If strCompWS1 <> strCompWS2 Then
                
                blnDifferentFound = True
                
                'Unterschiedliche Einträge in Tabelle1
                With ws1.Cells(intRow, intCol)
                    'Kommentar einfügen
                    .AddComment strCompWS2
                    'Kommentierte Zellen markieren
                    .Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                End With
                
                'Unterschiedliche Einträge in Tabelle2
                With ws2.Cells(intRow, intCol)
                    'Kommentar einfügen
                    .AddComment strCompWS1
                    'Kommentierte Zellen markieren
                    .Interior.ColorIndex = 6 'gelb, 3=rot, 4=grün, 8=türkis
                End With
            End If
        Next intRow
    Next intCol
    
    'Bildschirmaktualisierung einschalten
    Application.ScreenUpdating = True
    
    If Not blnDifferentFound Then _
        Call MsgBox("Keinen Unterschied gefunden.", vbInformation, "Info")
    
    'Objekte wieder freigeben
    Set ws1 = Nothing
    Set ws2 = Nothing
    
End Sub

Das trägt aber nicht zur Beschleunigung bei.
Gruß
Nepumuk
Anzeige
gelöst inkl. MsgBox
21.04.2020 11:35:42
Axel
Hi Nepumuk,
tausend Dank für Deine Hilfe!!!
Ich weiß, das Makro wird dadurch nicht schneller.
Jetzt funktioniert es alles perfekt inkl. Message Box.
Super!!!
Axel

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige