Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Doppelte Einträge mittels einer Userform verhindern

Forumthread: Doppelte Einträge mittels einer Userform verhindern

Doppelte Einträge mittels einer Userform verhindern
26.08.2025 10:48:05
Manuela Sepp
Hallo zusammen,
ich bin ganz neu hier und habe einige wenige Grundkenntnisse in VBA.
Ich habe mir eine Userform erstellt mit mehreren Textboxen.
Nun soll bei Eingabe der Artikelnummer geprüft werden ob diese schon vorhanden ist, und ein doppelter Eintrag verhindert werden.
Kann mir hier jemand helfen?

Ich danke euch
Manuela
Anzeige

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 11:37:58
Alwin Weisangler
Hallo Manuela,

für Spalte A wäre dies einer der vielen Lösungsmöglichkeiten:


Private Sub TextBox1_Change()
Dim ArtNr
If TextBox1 = "" Then Exit Sub
With Tabelle1
If IsDate(TextBox1) Then
ArtNr = CDate(TextBox1)
ElseIf IsNumeric(TextBox1) Then
ArtNr = CDbl(TextBox1)
Else
ArtNr = TextBox1
End If
If WorksheetFunction.CountIf(.Columns(1), ArtNr) > 0 Then
MsgBox "Die Art. Nr. " & ArtNr & " ist bereits vergeben"
End If
End With
End Sub

https://www.herber.de/bbs/user/178746.xlsm
Gruß Uwe
Anzeige
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 12:09:59
Manuela Sepp
Hallo Uwe,
herzlichen dank für deine schnelle Antwort.
Allerdings verstehe ich nicht ganz was das mit einem Datum zu tun hat?
Oder muss ich Date und Cdate ersetzen?
Sorry fürs blöde fragen.

Danke dir auf jeden Fall
LG Manuela
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 13:15:58
Alwin Weisangler
Hallo Manuela,

da die Artikelnummer alles Mögliche sein kann habe ich das so angelegt.
Es funktioniert natürlich auch mit .Find, .Match usw.

Wenn du kein Datum ausgewertet brauchst nimmst du dies raus und prüfst nur auf Zahlen.
Wie du siehst führen viele Wege nach Rom.

Gruß Uwe
Anzeige
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 12:01:59
daniel
Hi

Am einfachsten so
Lege dir ein weiteres Tabellenblatt an.
Verknüpfe jede Textbox mit einer Zelle auf diesem Blatt, in dem du die Adresse der Zelle in die Eigenschaft "Control source" einträgst, in der Form: 'Tabelle1'!A1
Alles, was du in die Textbox schreibst, wird dann auch in diese Zelle übernommen.
Mach das für jede Textbox und lass sie in Spalte A ausgeben

In die Spalte B schreib's du dann neben jede Ausgabezelle die Formel:
=wenn(Zählenwenns(A:A;A1)>1;"doppelt";"i.o")


In die Zelle C1 kommt dann diese Formel:
=wenn(Zählenwenns(b:b;"doppelt")>0;"Stop";"i.o")



In der Userform erweiterst du dann das Makro für die weitere Bearbeitung (meistens ein OK-Button) mit diesen Zeilen am Anfang,:
Damit verhinderst du die Ausführung des Makros, wenn in C1 noch Stop steht.

If Sheets("Tabelle???").Range("C1").value = "Stop" then

msgbox "es sind Werte doppelt, bitte korrigieren"
Exit Sub
End if


Damit du siehst, wo die doppelten stehen, machst zu folgendenes
Lege neben jeder Textbox eine Listbox an.
In dieser lässt du dir zu jeder Textbox das Ergebnis aus der Spalte B anzeigen, in dem du sie mit der jeweiligen Zelle aus Spalte B verknüpfst. Hierzu trägst du die Zelladresse in die Eigenschaft rowsource ein.
Damit sollte dann immer "i.o." oder "doppelt" in der Listbox stehen.

So kannst du das lösen, ohne viel programmieren zu müssen.

Gruß Daniel

Anzeige
Nehmen wir an...
26.08.2025 12:30:27
Case
Moin Manuela, :-)

... dass die Artikelnummern in Spalte B stehen (hier im Code Columns(2) im gerade aktiven Tabellenblatt) und die TextBox den Namen TextBox1 hat, dann folgend zwei Möglichkeiten (also entweder oder - nicht beide gleichzeitig): ;-)
Option Explicit

Private Sub TextBox1_Change()
Dim varTMP As Variant
With Me.TextBox1
varTMP = Application.Match(.Value, Columns(2), 0)
If Not IsError(varTMP) Then MsgBox "Schon vorhanden!": .SetFocus: .Value = Empty
End With
End Sub

Oder:
Option Explicit

Private Sub TextBox1_Change()
Dim varCell As Variant
With Me.TextBox1
Set varCell = Columns(2).Find(What:=.Value, LookAt:=xlWhole, LookIn:=xlValues, MatchCase:=True)
If Not varCell Is Nothing Then MsgBox "Schon vorhanden!": .SetFocus: .SelStart = 0: .SelLength = Len(.Text)
End With
End Sub

Servus
Case
Anzeige
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 13:24:37
Yal
Hallo Manuela,

im allgemein kann es auch sinnvoll sein, ein bereits vergebenen Artikelnummer, wenn auch nur temporär, nicht normal zu vergeben.
Du könntest, anstatt zu prüfen, ob bereits existent, ein Methode haben, um einen neuen, noch nie vergebenen (meist fortlaufend) Artikelnummer vorzuschlagen oder vorzuschreiben.

Sollte die Struktur der Artikelnummer nicht so einfach, dass es mit Max(ArtNr) +1 zu ermitteln ist, müsstest Du die Liste der ArtikelNr sortieren und auf Basis der letzten einen neuen erzeugen.

VG
Yal
Anzeige
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 13:28:37
Manuela Sepp
@Yal: Danke für deine Antwort.
In meinem Fall sind die Artikelnummern von Artikeln die wir geliefert bekommen. Diese ändern wir nicht.

@Case
Ich kann die Userform hochladen? Meinst du das?
Ja... - lade die Datei mit der UserForm hier hoch...
26.08.2025 13:33:04
Case
;-)
AW: Ja... - lade die Datei mit der UserForm hier hoch...
26.08.2025 13:43:40
Manuela Sepp
Ich stelle mich vermutlich grad blöd an. Aber ich kann keine Excel Datei hier hochladen
Anzeige
AW: Ja... - lade die Datei mit der UserForm hier hoch...
26.08.2025 13:48:56
Manuela Sepp
Es geht in der Datei um das Tabellenblatt Artikel.
Dort gibt es das Pluszeichen und in der Userform soll dann die Artikelnummer nicht doppelt eingetragen werden können.
Anzeige
Deine Artikelnummern...
26.08.2025 13:56:50
Case
Moin Manuela, :-)

... stehen in Spalte F also - Columns(6) - dann geht es. ;-)

Servus
Case
AW: Deine Artikelnummern...
26.08.2025 14:00:00
Manuela Sepp
Oh Gott, ich bin soo dämlich!! Ich danke dir sehr sehr :) GETESTET UND KLAPPT!
AW: Deine Artikelnummern...
26.08.2025 14:03:47
Manuela Sepp
Hi @alle :)

ich danke euch sehr für eure Hilfe und Anmerkungen :)
Anzeige
AW: Deine Artikelnummern...
28.08.2025 11:04:59
Manuela Sepp
Guten Morgen,

nun hat sich im Workflow noch ein Problem ergeben, für dass ich eine Lösung suche:
Wenn ich einen neuen Artikel anlege und die Artikelnummer schon vorhanden ist, werden nun die doppelten gefunden.
Wenn ich nun allerdings im bearbeiten Modus eines Artikels die Artikelnummer eingebe, geschieht das selbe. Was ja generell kein Problem ist.
Allerdings löscht er mir die Artikelnummer dann aus dem Feld und ich kann keine Änderungen am Artikel speichern. Also z.B. die Stückzahl verändern.
Das ist allerdings nicht möglich, da ich es so gemacht habe, dass eine Artikelnummer ausgefüllt werden muss...

Hilfe.. ich würde euch da gerne nochmal um Hilfe bitte, danke!
LG Manuela
Anzeige
Was bedeutet...
28.08.2025 11:20:46
Case
Moin Manuela, :-)

... das im Einzelnen - "Wenn ich nun allerdings im bearbeiten Modus eines Artikels die Artikelnummer eingebe..."? ;-)

Welche Schritte unternimmst du? Wir müssen den "Fehler" nachstellen können, um dir eine ad­äquate Antwort geben zu können. ;-)

Servus
Case
Anzeige
AW: Was bedeutet...
28.08.2025 11:32:51
Manuela Sepp
Ich gehe auf meinen Button Suchen/Bearbeiten. Das ist in der Datei der Stift/Lupe Button.
Dann öffnet sich eine Listbox mit allen Artikeln. Darin kann in suchen.
Mit einem Doppelklick kann ich eine UF aufrufen mit dem entsprechenden Artikel.
Nun kommt aber die Messagebox, dass die Artikelnummer bereits vorhanden ist und er leer das Textfeld Artikelnummer.
Was zur Folge hat dass ich die Änderung nicht speichern kann, da ich es so programmiert habe, dass die Textbox Artikelnummer gefüllt sein muss um speichern zu können.
Es würde schon reichen, wenn die Textbox Artikelnummer sich nicht leeren würde.
Anzeige
Du könntest...
28.08.2025 11:41:52
Case
Moin Manuela, :-)

... den Text auch nur komplett markieren: ;-)

Private Sub txtArtikelnummer_Change()

Dim varTMP As Variant
With Me.txtArtikelnummer
varTMP = Application.Match(.Value, Columns(6), 0)
If Not IsError(varTMP) Then .SetFocus: .SelStart = 0: .SelLength = Len(.Text)
End With
End Sub


Oder du nimmst nicht das Change-Ereignis der TextBox, sondern prüfst erst beim Speichern? Kommt ganz auf die Arbeitsweise an, die du möchtest. ;-)

Servus
Case
Anzeige
AW: Du könntest...
28.08.2025 11:50:53
Manuela Sepp
Und das ist die Lösung, ich danke dir von Herzen :)
AW: Du könntest...
28.08.2025 11:54:05
Manuela Sepp
Ahh, da war ich zu euphorisch...
Jetzt markiert es zwar beim Schritt bearbeiten, aber nicht mehr beim Anlegen... wo ist denn jetzt der Knoten in meinem Kopf?
Muss ich den Befehl doppelt eingeben?
Du brauchst/darfst es...
28.08.2025 12:49:15
Case
Moin Manuela, :-)

... nicht doppelt eingeben. ;-)

Bei mir markiert er beim neu anlegen der Daten. Wenn du allerdings noch eine MsgBox mit aufnimmst, dann klappt es nicht, weil die Box den Fokus klaut. ;-)
Nimm z. B. ein Label, das du ausblendest (mit fetter roter Schrift) und blende es bei Bedarf ein bzw. aus. ;-)

Servus
Case
Anzeige
AW: Du brauchst/darfst es...
28.08.2025 15:12:39
Manuela Sepp
Entschuldigt bitte dass ich mich so doof anstelle, aber es klappt bei mir einfach nicht.
Kannst du, Case, vielleicht nochmal schauen.
Hier die Datei mit den von mir vorgenommenen Änderungen.
https://www.herber.de/bbs/user/178772.xlsm
Ich danke euch sehr
Anzeige
Also bei mir...
28.08.2025 15:40:51
Case
Moin Manuela, :-)

... funktioniert es so: ;-)
https://www.herber.de/bbs/user/178773.xlsm

Habe noch eim Label aufgenommen (Label10). Wenn das sichtbar ist, kannst du nicht speichern, denn dann ist die Artikelnummer vorhanden.

Servus
Case
Anzeige
AW: Also bei mir...
28.08.2025 16:17:31
Manuela Sepp
Oh wie wunderbar, jetzt klappt es auch bei mir in allen Bereichen!
Ich kann gar nicht sagen wie toll ihr seid.

DANKE!!!!
AW: Nehmen wir an...
26.08.2025 12:48:49
Manuela Sepp
Ich danke dir sehr
Ich habe es jetzt folgendermaßen geändert:

Private Sub txtArtikelnummer_Change()


Dim varTMP As Variant
With Me.txtArtikelnummer
varTMP = Application.Match(.Value, Columns(4), 0)
If Not IsError(varTMP) Then MsgBox "Schon vorhanden!": .SetFocus: .Value = Empty
End With


End Sub

Meine Spalte ist D bzw die Spalte Artikelnummer in meiner intelligenten Tabelle.
Leider klappt das nicht und ich kann den Eintrag wieder vornehmen.
Weisst du evtl. was ich falsch gemacht habe?
Danke und LG
Anzeige
Könntest du...
26.08.2025 13:00:59
Case
Moin Manuela, :-)

... eine kleine Beispieldatei hochladen, wo das Problem ersichtlich ist? ;-)

Servus
Case
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 12:24:08
Manuela Sepp
Hallo Daniel,

danke schonmal für deine Antwort.
Ich möchte eben nicht mit weiteren Tabellenblättern arbeiten.
Außerdem muss es mir nicht anzeigen wo der Artikel steht, das suche ich dann über meine Suchfunktion, dann kann ich nämlich auch die Stückzahlen oder sonstiges ergänzen für den Artikel.
Ich möchte eben wenn ich die Artikelnummer in die TextBox eingebe eine Meldung erhalten, dass diese bereits vorhanden ist.

Danke dir!
LG Manuela
Anzeige
AW: Doppelte Einträge mittels einer Userform verhindern
26.08.2025 12:33:32
daniel
Du kannst mit weiteren Tabellenblättern und Formeln arbeiten,oder du kannst programmieren.
Was kannst du besser?
Ich habe dir einen Weg gezeigt, wie du es mit sehr wenig Programmierungswand lösen kannst.

Ansonsten, hier fehlt noch eine wichtige Information von dir:

Ich möchte eben wenn ich die Artikelnummer in die TextBox eingebe eine Meldung erhalten, dass diese bereits vorhanden ist.

Wo soll den nachgeschaut werden, ob die Nummer schon vorhanden ist?
In weitern Textboxen der Userform?
Irgendwo in der Exceltabelle?
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18