Mit VBA Dopplung vermeiden

josef24

Erfahrenes Mitglied
Hallo und guten Tag. Ich gebe in einer Text Box neue Datensätze ein, und möchte vermeiden, das es doppelte Datensätze geben kann. Z. B. wenn ich einen Datensatz eingebe nimmt er die ZeilenNr. dazu, was aber, wenn ein anderer Datensatz gelöscht wird, dazu führen kann, das die noch aktive ZeilenNr. wiederum als neu Zeile erkannt wird. Frage: Wie könnte man so etwas umgehen. Füge meinen Kode mal hier an. Danke und Gruß Josef

Code:
Private Sub cmdNew_Click()
   Dim lZeile As Long
     lZeile = 1
     Do While Trim(CStr(wsAt.Cells(lZeile, 3).Value)) <> ""
         lZeile = lZeile + 1
     Loop
      actnumber = CStr("NeuNR" & lZeile)
     wsAt.Cells(lZeile, 1) = actnumber  ' CStr("NeuNR " & lZeile)
     lstData.AddItem actnumber  '  CStr("NeuNR " & lZeile)
     lstData.ListIndex = lstData.ListCount - 1
    ActiveWorkbook.Save
    End Sub
 
Hä?
Also. Ich denke, es könnte sich um Excel handeln. Gut zu wissen bevor man sich den Wirren des Textes ausliefert.
Der unkommentierte VBA-Code hilft leider auch nicht wirklich weiter.
Ich gebe in einer Text Box neue Datensätze ein
Eine TextBox gibt ganze Datensätze? Ein Datensatz ist eine Ansammlung von mehreren Feldern. Alle zusammen in einer TextBox? Naja, wenn der Datensatz nur ein Feld hat. geht das.

wenn ich einen Datensatz eingebe nimmt er die ZeilenNr. dazu
Woher? Ausgewürfelt?
Oh, ich glaube, dein Code sollte die erste Zeile finden, in der die Spalte 3 leer ist und nimmt dann diese Zeilennummer

Willst du wirklich die Datensatznummer mit der Excel-Zeilennummer gleichsetzen? Da handelst du dir in Zukunft noch viel Probleme ein.

Besser:
Eine Spalte mit der Datensatznummer. Beim anlegen eines neuen Datensatzes mit MAX() die grösste Nummer auslesen und diese +1 verwenden.
 
Hallo und Danke. Das mit der MAX() Funktion ist wohl hierfür das Optimum. Kannst du es vielleicht an einem Beispiel zeigen? Gruß Josef
 
Du musst die ID als Zahl speichern. Felder mit Text (zb. Kopfzeile) wird ignoriert
Hier ist die ID in Spalte C
Visual Basic:
newID = WorksheetFunction.Max(wsAt.Range("C:C")) + 1
 
Danke für die Lösung, funktioniert natürlich. Habe damit eine Fehlerquelle ausgeschlossen. Ich hätte es mit meiner Kenntnis nicht hin bekommen. Gruß Josef
 
Muss mich entschuldigen, ging doch nicht so wie erhofft. Hänge deshalb mal ein Beispiel an. Vielleicht geht da noch was. Danke und Gruß Josef
 

Anhänge

  • Kopie von TESTTABELLE m Datum.zip
    265,8 KB · Aufrufe: 1
Ich möchte noch eine Idee von mir anmerken. Ginge es auch wenn man anstelle von der lfd. Nr. z. B. & Time anfügen könnte. Damit wäre man jegliche Doppelung los. Weiterhin wäre es sehr unwahrscheinlich die Zeitangabe mehfach zu haben. Wie würde das für diese Zeile aussehen? Wenn ich einfach "& Time" anhänge, überträgt sich das auch auf andere Datenfelder. Danke für entsprechende Tipps. Gruß Josef
 
Das Excelsheet kommt mir bekannt vor. Hatte ich glaub auch schon mal offen.
Aber es ist dein Projekt - ich merke mir nicht auswendig, wie das funktionieren soll. Wo sehe ich jetzt das Ding mit der neuen ID?
Schreib in Zukunft jedes mal dazu, wo wie was.
 
Danke erst mal für die Nachricht. Ja, die Datei hatte ich bereits als Beispiel mal hoch geladen. Mein Problem mal näher erläutert: Ich gebe in der USERFORM
(User Klick) unter Button (Rosa) neuer Datensatz in einem erzeugten leeren Datensatz, neue Daten ein. Dabei wird in Spalte "A" ein neuer Text plus Nr. der Zeile eingetragen. Dabei kann es Vorkommen, das die Nr. der Zeile mehrmals verwendet werden kann, wenn die Datensätze nach gewissem Modus sortiert werden.
Somit könnten gleiche Datensätze (Nr. der Zeile) mehrmals möglich sein. Für mich ist weder die "Zeilen- Nr. noch sonstiges zwingend erforderlich. Mir geht es nur darum wie jede Zeile eine Kennung erhält, ohne Dopplung usw. Dies sollte mit der Eingabe möglich sein. Danke und Gruß Josef
 
Und noch mal ganz klar. Eetscheide dich.
Wie genau, soll die zukünftige ID aussehen.
Mach mal ein Beispiel.
 
Zurück