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.

Doppelte Einträge in ListBox erkennen
#1
Einen schönen guten Tag Excelianer,

ich habe ein anscheint seltenes Problem. Da ich seit h danach auf allen Forenplattformen suche und nichts finde.

Problem:

Ich habe eine ListBox1 die sich per VBA in einer Userform füllt. Sie liest die Daten aus Tabelle1 aus. Soweit auch alles super.

Mein Problem ist das ich gleiche Namen in Spalte A habe.


hier mal ein Beispiel, da meine Datei schon so gewaltig ist das es einfacher als wenn ich sie hochladen würde.

A                   B                 C                       D               E
Name             Vorname    Geburtsdatum  Wohnort   Personalnummer

Mustermann   Max             01.01.1999         Berlin          123456
Mustermann   Paul             12.12.2012         München     654321
Musterfrau     Sonja           31.12.1949         Hamburg     456789


Nun wird in der ListBox1 kein Unterschied zwischen Mustermann 1 und 2 gemacht. Alle Werte A-E werden zusätzlich in TextBoxen angezeigt, daher kann ich gut sehen das sich kein Wert verändert. Es werden nur die Daten des ersten Mustermann, Max angezeigt.

Nicht wundern wegen meinem CODE das ist eine andere Datei, die etwas anders ist, aber auf die selbe Weise die Daten einfügt und mir damit die selben Probleme bereitet.
Also wenn wer doch mehr haben will, gern, mir Platz der Kopf, ich seh vor lauter !"§$%&/()=?`*' nichts mehr.....

Danke..!!! :22:


Hier noch mein Code für die Listbox

Code:
Private Sub ListBox1_Click()
  Dim lZeile As Long
    'Wenn der Benutzer einen Namen anklickt, suchen wir
     'diesen in der Tabelle1 heraus und tragen die Daten
    'in die TextBoxen ein.
   
    'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte
    txt_ersteller = ""
    txt_Problem = ""
    txt_Lösung = ""
    txt_date = ""
   
   
    'Nur wenn ein Eintrag selektiert/markiert ist
    If ListBox1.ListIndex >= 0 Then
   
        lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
        'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
         
      Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
         
       
            'Wenn wir den Namen aus der ListBox1 in der Tabelle1 Spalte 2
            'gefunden haben, übertragen wir die anderen Spalteninhalte
            'in die TextBoxen!
            
              If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
             
           
                'TextBoxen füllen
                txt_Problem = Tabelle1.Cells(lZeile, 5).Value
                txt_Lösung = Tabelle1.Cells(lZeile, 6).Value
                txt_ersteller = Tabelle1.Cells(lZeile, 7).Value
                FillAndFormatDate2DateText Me.txt_date, Tabelle1.Cells(lZeile, 8).Value

               
                Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
           
            End If
       
            lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
        Loop
       
    End If
   
End Sub

Private Sub UserForm_Initialize()
  Dim lZeile As Long
 
    'Alle TextBoxen leer machen
    txt_ersteller = ""
    txt_Problem = ""
    txt_Lösung = ""
    txt_date = ""
   
    'In dieser Routine laden wir alle vorhandenen
    'Einträge in die ListBox1
    ListBox1.Clear 'Zuerst einmal die Liste leeren
   
    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
    'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""

 
       
        'Aktuelle Zeile in die ListBox eintragen
        ListBox1.AddItem
           ListBox1.List(ListBox1.ListCount - 1, 0) = Cells(lZeile, 1).Text
           ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(lZeile, 2).Text
           ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(lZeile, 3).Text
           ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(lZeile, 4).Text
           
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
    Loop
End Bub
Antworten Top
#2
Hallo,
Private Sub ListBox1_Click()
 With ListBox1
   'Nur wenn ein Eintrag selektiert/markiert ist
   If .ListIndex >= 0 Then
     'TextBoxen füllen
     txt_Problem = .List(.ListIndex, 0)
     txt_Lösung = .List(.ListIndex, 1)
     txt_ersteller = .List(.ListIndex, 2)
     FillAndFormatDate2DateText Me.txt_date, .List(.ListIndex, 3)
   End If
 End With
End Sub
Gruß Uwe
Antworten Top
#3
Guten Morgen,

ich bin ja nicht mehr ganz so der Anfänger in VBA, aber ich kann mir nicht erklären was ich damit anfangen soll.

Soll ich da was ersetzen oder ergänzen. Und wie soll das zustande kommen das die ListBox1 nun unterscheiden kann zwischen dem einen Mustermann und dem anderen Mustermann?

aber danke für die Antwort.

P.S. es würde mir auch weiter helfen wenn mir wer einen Link schickt
Antworten Top
#4
So da bin ich nochmal,
es war zwar nicht die Lösung die ich wollte aber es hat mich auf eine Idee gebracht.


Nun läd er die ersten 4 Spalten in meine ListBox1 und die anderen 4 in die TextBoxen


Danke nochmal Kuwer

Code:
Private Sub ListBox1_Click()

  Dim lZeile As Long
 
    'Wenn der Benutzer einen Namen anklickt, suchen wir
    'diesen in der Tabelle1 heraus und tragen die Daten
    'in die TextBoxen ein.
   
    'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte
    txt_Problem = ""
    txt_Lösung = ""
    txt_date = ""
    txt_ersteller = ""
   
   
    'Nur wenn ein Eintrag selektiert/markiert ist
    If ListBox1.ListIndex >= 0 Then
   
        lZeile = 2 'Start in Zeile 7, Zeile 6 sind ja die Überschriften
        'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
        Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
         
       
            'Wenn wir den Namen aus der ListBox1 in der Tabelle1 Spalte 2
            'gefunden haben, übertragen wir die anderen Spalteninhalte
            'in die TextBoxen!
            If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
             
           
                'TextBoxen füllen
                txt_Problem = ListBox1.List(ListBox1.ListIndex, 4)
                txt_Lösung = ListBox1.List(ListBox1.ListIndex, 5)
                txt_date = ListBox1.List(ListBox1.ListIndex, 6)
                txt_ersteller = ListBox1.List(ListBox1.ListIndex, 7)
               
               
                Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
           
            End If
       
            lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
        Loop
       
    End If
   

End Sub

Private Sub UserForm_Initialize()
   Dim lZeile As Long
 
    'Alle TextBoxen leer machen
    txt_Problem = ""
    txt_Lösung = ""
    txt_date = ""
    txt_ersteller = ""


   
    'In dieser Routine laden wir alle vorhandenen
    'Einträge in die ListBox1
    ListBox1.Clear 'Zuerst einmal die Liste leeren
   
    lZeile = 2 'Start in Zeile 7, Zeile 6 sind ja die Überschriften
    'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""

 
       
        'Aktuelle Zeile in die ListBox eintragen
        ListBox1.AddItem
           ListBox1.List(ListBox1.ListCount - 1, 0) = Cells(lZeile, 1).Text
           ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(lZeile, 2).Text
           ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(lZeile, 3).Text
           ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(lZeile, 4).Text
           ListBox1.List(ListBox1.ListCount - 1, 4) = Cells(lZeile, 5).Text
           ListBox1.List(ListBox1.ListCount - 1, 5) = Cells(lZeile, 6).Text
           ListBox1.List(ListBox1.ListCount - 1, 6) = Cells(lZeile, 7).Text
           ListBox1.List(ListBox1.ListCount - 1, 7) = Cells(lZeile, 8).Text
           
           
           
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
    Loop
End Sub
Antworten Top
#5
Hallo,

traust Du Deiner eigenen Initialize-Routine nicht, dass Du bei jedem Klick in die ListBox diese noch einmal  mit der Tabelle vergleichst?

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Kaywarri124
Antworten Top
#6
Hallo,

Da dieser Code aus einer anderen Tabelle von mir stammt in der viele Veränderungen durchgeführt werden dich auf die ListBox auswirkt, hat das eher was damit zu tun
das sich diese auch nach der Initialize-Routine noch überwacht.

In diesem Fall aber, gebe ich dir recht, macht es wenig sinn. Aber wenn es da funzt dann funzt es auch da und habe meine UF jetzt fertig und läuft genauso wie sie sein soll.



mfg Kaywarri




=wenn(a1="keine Ahnung";B1="mal nachdenken";C1="zu blöd ich frag das Forum")
=wenn(a1="keine Ahnung";B1="mal nachdenken";C1="zu blöd ich frag das Forum")
Antworten Top


Gehe zu:


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