Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Prüfen ob Eintrag bereits vorhanden ist in externer Tabelle durch UserForm
#1
Hallo Zusammen,

aktuell bin ich dabei ein System für meine Kundendaten zu bauen und verwende hierfür eine UserForm, leider ist es so das wenn ich einen Eintrag lösche und danach einen neuen Erstellen will das ich manche Zahlen (Kunden) mehrmals drin habe z.B. Ich Lösche Kunde 3 und erstelle einen neuen Eintrag und habe dann Kunde 11 drei mal drin,
wie kann ich das lösen das er bevor einen neuen Kunden anlegt prüft, ob z.B. Kunde 3 vorhanden ist und wenn nicht er diesen erstellt anstatt bei Kunde 11 weiter zu machen,
ich hoffe ihr versteht was ich meine.

Hier der Code:

Code:
'Neuer Eintrag Schaltfläche Ereignisroutine
Private Sub Kunden_Eintragen_Click()
   Dim lZeile As Long
   
   
   
       Workbooks.Open Filename:="C:\Users\User\Desktop\Kunden_Datenbank.xlsx"
        'With Workbooks("Kunden_Datenbank.xlsx").Sheets("Kundendaten")
        'Set wks = Worksheets("Kundendaten")
       
    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die überschriftrn
     
      Do While Trim(CStr(Worksheets("Kundendaten").Cells(lZeile, 1).Value)) <> ""
         lZeile = lZeile + 1 'Nächste Zeile bearbeiten
     Loop
     
     Worksheets("Kundendaten").Cells(lZeile, 1) = CStr("Kunde " & lZeile)
     
    'With wks(Rows.Count, 1).End(xlUp)
     '.AutoFill .Resize(2), Type:=xlFillDefault
     'ListBox1.AddItem .Offset(1).Value
     'End With
     
     Worksheets("Kundendaten").Cells(lZeile, 1) = CStr("Kunde " & lZeile - 1)
     
     Kunden_ListBox1.AddItem CStr("Kunde " & lZeile)
     
     Kunden_ListBox1.ListIndex = Kunden_ListBox1.ListCount - 1
     

   
End Sub

vielleicht den Code für Löschen auch noch mal, da er wenn ich Kunde 3 lösche, er auf einmal Kunde 17 zwei mal drin hat.

Code:
Private Sub Kunden_Loeschen_Click()
   Dim lZeile As Long
     If MsgBox( _
       prompt:="Löschen?", _
       Buttons:=vbQuestion + vbYesNo _
       ) = vbNo Then Exit Sub
 
     'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
     If Kunden_ListBox1.ListIndex = -1 Then Exit Sub
 
     'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
     lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
     'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
     
          Workbooks.Open Filename:="C:\Users\User\Desktop\Kunden_Datenbank.xlsx"
         
     Do While Trim(CStr(Worksheets("Kundendaten").Cells(lZeile, 1).Value)) <> ""
   
         'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
         If Kunden_ListBox1.Text = Trim(CStr(Worksheets("Kundendaten").Cells(lZeile, 1).Value)) Then
           
             'Eintrag gefunden, die ganze Zeile wird nun gelöscht
             Worksheets("Kundendaten").Rows(CStr(lZeile & ":" & lZeile)).Delete
           
             'Die ListBox muss nun neu geladen werden!
             Call UserForm_Initialize
             If Kunden_ListBox1.ListCount > 0 Then Kunden_ListBox1.ListIndex = 0
           
             Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
           
         End If
   
         lZeile = lZeile + 1 'Nächste Zeile bearbeiten
     Loop
   
End Sub
Antworten Top
#2
wenn du eine Zeile löschst  verschiebt sich der untere Inhalt nach oben  also steht Kunde 17 in Zeile 16 
neuer Kunde erhält ZeilenNr aus erster leerer Zeile z.b. 17  also zweimal Kunde 17 

Deine Routine landet immer beim ersten Treffer und löscht diesen. Ich hoffe diese Kundennamen  mit Nr sind  später nicht doppelt vorhanden? 


gruß

rb
[-] Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:
  • Jisma
Antworten Top
#3
Hallöchen,

schaue Dir mal in diesem Teil die erste und letzte Codezeile an:

Code:
Worksheets("Kundendaten").Cells(lZeile, 1) = CStr("Kunde " & lZeile)
    
    'With wks(Rows.Count, 1).End(xlUp)
     '.AutoFill .Resize(2), Type:=xlFillDefault
     'ListBox1.AddItem .Offset(1).Value
     'End With
    
Worksheets("Kundendaten").Cells(lZeile, 1) = CStr("Kunde " & lZeile - 1)


Mal abgesehen vom Tipp von Ralf zur Nummer 17 frag ich mich, warum Du erst die Zeilennummer zum Kunden hinzufügst und anschließend die Zeilennummer -1. Letzteres sollte reichen. Wenn Du unbedingt mit Zeilennummern arbeiten willst, dann lösche keine Zeilen wenn Du einen Kunden löschst. Leere die Zeile und benenne den Kunde um, z.B. bei Kunde3 nimmst Du Gelöscht3. Beim Füllen der Listbox schließt Du dann alle aus, die mit Gelöscht anfangen. Du musst dann nur aufpassen, weil der Index nicht mehr mit der Kundennummer in Verbindung gebracht werden kann.
Ich würde bei einem neuen Kunden eher die maximale Nummer + 1 nehmen und die Nummern gelöschter Kunden nicht neu vergeben.

CStr ist übrigens an der Stelle auch nicht nötig.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Jisma
Antworten Top
#4
Hallo Zusammen,

vielen Dank für eure Unterstützung, ich habe es nun so umgebaut das sobald ich einen Kunden lösche er nicht die ganze Zeile löscht sondern nur den Inhalt und mir dann anstatt Kunde, Geloescht plus die Zahl schreibt, ich werde nun sehen ob das für mich Zielführend ist sobald ich damit längerfristig arbeite - aber fürs erste Sieht es erstmal gut aus und macht auch das was ich will.

Besten Dank.
Antworten Top
#5
Oha und Moin!
Niemals, also NIEMALS löscht man einen Kunden!
Man macht ihn höchstens inaktiv, bspw. durch eine zusätzliche Spalte mit x, die man entsprechend ausfiltern kann.

Alles andere führt über kurz oder lang zu Chaos!

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
Hallöchen,

Zitat:Niemals, also NIEMALS löscht man einen Kunden!

ich habe vor über 20 Jahren eine Versicherung gewechselt und bekam voriges Jahr Post, ich solle doch mal meine Daten prüfen und aktualisieren... Sicherheitshalber noch mal: Post, also nicht Email oder so, sondern richtig Papier und auch wirklich von der Firma und nicht von anderswo ... Die hätten mich schon lange löschen müssen, denke ich.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
Da hat bei Dir einer das "x" aus Spalte Q entfernt!  85
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste