HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
2019
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Alwin Weisangler
27.04.2026 22:49:19
AW: Code funktioniert nicht @Uwe
Hallo Sabrina,

ich habe zwecks Test MasterDatei (Datei mit den beiden Prozeduren) im Blatt "TB02" 227 eingegeben. Da wird, da dieser Eintrag in der Masterdatei zum ersten mal eingetragen wurde, keine MsgBox gestartet. Grund: in der externen Datei existiert in Spalte C diese Nummer.

Trage ich jetzt im Blatt "TB01" eine 227 ein kommt MsgBox mit Hinweis dass diese Nummer bereits im Blatt "TB02" vergeben ist und entfernt den Eintrag. Mehr passiert hier nicht, weil dies so programmiert ist.

Was du mir bescheibst, kann ich egal was ich hier mache nicht nachvollziehen. Schlicht dies passiert so nicht.
Lade bitte ein Beispiel (beide Dateien in eine Zip packen), nebst eindeutiger Zuordnung in der Fehlerbeschreibung bitte nochmals hier hoch.

So kann ich mir den Vorgang in Ruhe analysieren, wenn es passiert.

vorsorglich hier mal noch die beiden Prozeduren von mir geändert auf frühe übergabe des Target.Value in Variable vTar (das hatte ich im vorherigen Artikel mitgeteilt und damit habe ich eben getestet):


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Wks As Worksheet, Z As Range, tmp, vTar ' vTar für den Fall das Target früh gelesen werden soll
If Not Intersect(Target, Range("A10:A10000")) Is Nothing Then
If Target.Text = "" Then Exit Sub
Application.EnableEvents = False
vTar = Target ' frühes Übergeben des Target.Value
If IsNumeric(Target.Value) Then Target = CDbl(Target.Value)
For Each Wks In Sheets
For Each Z In Wks.Range("A10:A10000").SpecialCells(xlCellTypeConstants)
If Not IsError(Application.Match(Target, Z.Columns(1), 0)) And Z.Parent.Name <> Target.Parent.Name Then
tmp = Split(Right(Z.Address(0, 0, , True), Len(Z.Address(0, 0, , True)) - InStrRev(Z.Address(0, 0, , True), "]")), "!")
MsgBox "Die Lfd. Nr. " & Target & " ist bereits in Zelle: " & vbNewLine & tmp(1) & " " & tmp(0) & " enthalten!", vbExclamation, "A C H T U N G"
Target = ""
Target.Select
Else
If WorksheetFunction.CountIf(Wks.Columns(1), Target) > 1 Then
MsgBox "Die Lfd. Nr. " & Target & " ist bereits in Zelle: " & vbNewLine & Wks.Cells(Application.Match(Target, Wks.Columns(1), 0), 1).Address(0, 0) & " " & Target.Parent.Name & " enthalten!", vbExclamation, "A C H T U N G"
Target = ""
Target.Select
End If
End If
Next
Next
End If
Application.EnableEvents = True
Call AbgleichExtern(vTar) 'für den Fall das Target spät gelesen werden soll dann: Call AbgleichExtern(Target)
End Sub

Sub AbgleichExtern(lfdNr As Variant)
Dim rs As Object, arr, i&, k&, datN
Set rs = CreateObject("ADODB.Recordset")
With rs
.CursorLocation = 3
.CursorType = 3
.Open "SELECT * FROM [" & extSh & "$]", "Provider=Microsoft.ACE.OLEDB.12.0;" & "Extended Properties=""Excel 12.0 xml"";" & "Data Source= " & extMapPath
If (.EOF And .BOF) = False Then
arr = .GetRows
End If
.Close
End With
Set rs = Nothing
For i = LBound(arr, 2) To UBound(arr, 2)
If IsNumeric(arr(2, i)) Then arr(2, i) = CDbl(arr(2, i))
If arr(2, i) = lfdNr Then k = k + 1
Next i
datN = Right(extMapPath, Len(extMapPath) - InStrRev(extMapPath, "\"))
If k = 0 Then MsgBox "Lfd. Nummer " & lfdNr & " ist in Datei: " & datN & "! vorhanden", vbOKOnly, "Fehler!!!"
End Sub



Gruß Uwe


Als Antwort auf diesen Beitrag
Sabrina
27.04.2026 22:03:25
AW: Code funktioniert nicht @Uwe
Hallo Uwe

"... Diese war so angelegt, dass die MsgBox gestartet wird, wenn kein Treffer vorhanden ist. " ==> das ist völlig korrekt. Heißt =0 passt.

Wenn ich nun eine Nr. eintrage, die sowohl in der aktuellen als auch in der externen vorhanden ist, passiert folgendes:

MSGBox "Nr. ist bereits in xy vorhanden" ==> das ist auch völlig korrekt

Wenn ich diese Meldung aber bestätige, erscheint die MSGBox: "Nr. ist nicht in der Datei xy vorhanden" ==> diese Meldung darf nicht erscheinen, da sie vorhanden ist.

Lediglich, wenn die Nr. NICHT in der externen Datei ist, dass soll o.g. erscheinen.

Sorry Uwe, dass ich dich "nerve" - bin dir sehr dankbar für deine Unterstützung.

LG Sabrina
Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.