Option Explicit
'******************************************************************************
Function DoppelteEintraegeImRangeSuchen(ws As Worksheet, _
GeaenderteZellen As Range, _
Bereich As Range)
'*** ws - Verweis auf das Arbeitsblatt
'*** GeaenderteZellen - Bereich einer/mehrerer Zelle/n, die geändert wurden
'*** Bereich - zu überwachender Bereich
'***
'*** Makro dient zum Verhindern doppelter Einträge im überwachten Bereich
'***
'*** Leere Zellen werden nicht gepfüft.
'******************************************************************************
Dim AdresseErsterFundort As String
Dim b_DoppeltenEintragGefunden As Boolean
Dim SuchBereich As Range, Zelle As Range, EineZelle As Range
->Leerer geanderter Bereich ?
If GeaenderteZellen Is Nothing Then GoTo AUFRAEUMEN
->liegt die Zellen im überwachten Bereich ?
If Application.Intersect(GeaenderteZellen, Bereich) Is Nothing Then GoTo AUFRAEUMEN
->den Bereich auf den benutzten Teil einschränken
Set SuchBereich = Application.Intersect(ws.UsedRange, Bereich)
->kein Bereich im benutzten Bereich ?
If SuchBereich Is Nothing Then GoTo AUFRAEUMEN
->Zellen nacheinander bearbeiten
For Each EineZelle In GeaenderteZellen
->liegt die Zelle im überwachten Bereich ?
If Application.Intersect(EineZelle, Bereich) Is Nothing Then GoTo AUFRAEUMEN
->Leere Zelle -> nicht suchen
If EineZelle.Value <> Then
->Suchen Inhalt von GeaenderteZelle
Set Zelle = SuchBereich.Find(What:=EineZelle.Value, _
LookIn:=xlValues, _
LookAt:=xlWhole)
If Not Zelle Is Nothing Then
b_DoppeltenEintragGefunden = False
If Zelle.Address <> EineZelle.Address Then
b_DoppeltenEintragGefunden = True
Else
Set Zelle = SuchBereich.FindNext(Zelle)
If Not Zelle Is Nothing Then
If Zelle.Address <> EineZelle.Address Then
b_DoppeltenEintragGefunden = True
End If
End If
End If
If b_DoppeltenEintragGefunden Then
->Ist mehr als eine Zelle in GeanderteZellen ?
If GeaenderteZellen.Count = 1 Then
MsgBox _
Doppelter Wert in & EineZelle.Address(False, False) & ! & vbLf & _
EineZelle.Address(False, False) & wird gelöscht., vbCritical
Application.EnableEvents = False
EineZelle.Value =
EineZelle.Select
Application.EnableEvents = True
Else
MsgBox _
Doppelter Wert in & EineZelle.Address(False, False) & ! & vbLf & _
Mehrere Werte wurden gleichzeitig geändert. & vbLf & _
Bitte korrigieren Sie von Hand., vbCritical
GoTo AUFRAEUMEN
End If
End If
End If
End If
Next
AUFRAEUMEN:
Set SuchBereich = Nothing: Set Zelle = Nothing: Set EineZelle = Nothing
End Function