Application.Match() anstelle WorksheetFunction.Match() verwenden.
Der Vorteil liegt auf der Hand:
Wenn .WorksheetFunction.Match() nichts findet, bricht Dein Code mit einer Fehlermeldung ab.
Wenn .Match() nichts findet, wird der Code nicht abgebrochen, sondern der Fehler durchgereicht.
Hinweis:
Du kannst jetzt die Onlinehilfe durchsuchen, aber Du wirst nichts finden. Muss man halt wissen. Ich bin heute noch dankbar dafür. Ein Hoch auf die alten Haudegen und Dinos der VBA-Welt, welche Ihr WIssen in deutschen und englischen Foren weitergeben.
Heisst:
Suche mit Application.Match() in Spalte B nach dem Suchwert und speichere den Rückgabewert in eine Variant-Variable.
Jetzt prüfst Du diese Variable, ob diese einen Fehler oder eine Zahl zugewiesen bekommen hat.
Wenn Fehler, mach nichts weiter, wenn kein Fehler(also Zahl) dann ist das die Zeilennummer iaus Spalte B.
Diese Zeilennummer könntest Du zwar wie oben bereits von Dir gezeigt reinbasteln, bequemer wäre aber anstelle Range(...) mit Cells(...) zu arbeiten.
Nochmal zu mitschreiben:
IF Not IsError(DeineVariantVariable) Then '*** wenn also kein Fehler bzw eine Nummer zurückgegeben wurde
Cells(DeineVariantVariable, "B")...
Cells(Zeilennumer, Spaltennummer) liefert ja ein Range-Objekt. dh. im Grunde also eine Zelle.
Jetzt fehlt Dir nurnoch eine Methode, um auf die darunterliegende Zelle zuzugreifen.
Diese Methode beherrscht Deiner Zelle:. Sie heisst Offset().
Folglich:
IF Not IsError(DeineVariantVariable) Then
IF Cells(DeineVariantVariable, "B").Offset(1,0).Value <> Range("C11").Value Then
'**** da willst Du hin
Klar soweit?
Gut. Glaub ich aber erst, wenn Ich einen Code aus dieser Richtung sehe... Ist nämlich nicht immer ganz unschwer.
|