Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Problem mit Event

Betrifft: Problem mit Event von: ANNAnas
Geschrieben am: 23.04.2014 10:57:21

Guten Morgen allerseits :)

ich habe ein Problem mit einem Event...hier erstmal der Quellcode:

Private Sub TextBox1_Enter()
Dim rng As Range
Set rng = Sheets("Übersichtsliste").Range("C:C").Find(What:=TextBox1.Text, Lookat:=xlWhole,  _
LookIn:=xlValues)
          ListBox2.Clear
          If InStr(1, TextBox1.Value, "-1") > 0 Then
              ListBox2.List = rng.Resize(2, 1).Value
          End If
          End Sub
In der Listbox2 kann man dann, wenn der Suchbegriff in der Textbox1 enthalten ist, auswählen und alle anderen Textboxen werden gefüllt:
Private Sub ListBox2_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
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    TextBox7 = ""
    TextBox8 = ""
    TextBox9 = ""
    TextBox10 = ""
    TextBox11 = ""
    TextBox12 = ""
    TextBox13 = ""
    TextBox14 = ""
    TextBox15 = ""
    TextBox16 = ""
    TextBox17 = ""
    TextBox18 = ""
    TextBox19 = ""
    TextBox20 = ""
    TextBox21 = ""
    TextBox22 = ""
    TextBox23 = ""
    TextBox24 = ""
    TextBox25 = ""
    TextBox28 = ""
        
    'Nur wenn ein Eintrag selektiert/markiert ist
    If ListBox2.ListIndex >= 0 Then
    
        lZeile = 13 'Start in Zeile 13, Zeile 1 sind ja die Überschriftrn
        'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
        Do While Trim(CStr(Tabelle1.Cells(lZeile, 3).Value)) <> "" '13 Zeile & 3 Spalte
        
            'Der Namen aus der ListBox1 wird aus der Tabelle1 Spalte 1
            'in die Textboxen übertragen
            If ListBox2.Text = Trim(CStr(Tabelle1.Cells(lZeile, 3).Value)) Then
                        
                'TextBoxen füllen
                TextBox1 = Trim(CStr(Tabelle1.Cells(lZeile, 3).Value))
                TextBox2 = Tabelle1.Cells(lZeile, 5).Value
                TextBox3 = Tabelle1.Cells(lZeile, 4).Value
                TextBox4 = Tabelle1.Cells(lZeile, 74).Value
                TextBox5 = Tabelle1.Cells(lZeile, 75).Value
                TextBox6 = Tabelle1.Cells(lZeile, 13).Value
                TextBox7 = Tabelle1.Cells(lZeile, 14).Value
                TextBox8 = Tabelle1.Cells(lZeile, 15).Value
                TextBox9 = Tabelle1.Cells(lZeile, 16).Value
                TextBox10 = Tabelle1.Cells(lZeile, 17).Value
                TextBox11 = Tabelle1.Cells(lZeile, 18).Value
                TextBox12 = Tabelle1.Cells(lZeile, 19).Value
                TextBox13 = Tabelle1.Cells(lZeile, 20).Value
                TextBox14 = Tabelle1.Cells(lZeile, 83).Value
                TextBox15 = Tabelle1.Cells(lZeile, 84).Value
                TextBox16 = Tabelle1.Cells(lZeile, 85).Value
                TextBox17 = Tabelle1.Cells(lZeile, 86).Value
                TextBox18 = Tabelle1.Cells(lZeile, 87).Value
                TextBox19 = Tabelle1.Cells(lZeile, 88).Value
                TextBox20 = Tabelle1.Cells(lZeile, 89).Value
                TextBox21 = Tabelle1.Cells(lZeile, 90).Value
                TextBox22 = Tabelle1.Cells(lZeile, 91).Value
                TextBox23 = Tabelle1.Cells(lZeile, 80).Value
                TextBox24 = Tabelle1.Cells(lZeile, 81).Value
                TextBox25 = Tabelle1.Cells(lZeile, 82).Value
                TextBox28 = Tabelle1.Cells(lZeile, 92).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
Zum verständnis:In der Textbox1 ist der Primärschlüssel enthalten und vordifinert. Das heißt, der Benutzer kann keine Änderungen daran anstellen. Alle anderen Textboxen werden anhand dessen gefüllt usw...Das zur Vorgeschichte. Interessant ist dieser Punkt:

Private Sub TextBox1_Enter()
....
End Sub
Wenn dieses Event drinne steht, funktioniert alles Reibungslos. Ändere ich es auf _Change kann ich nicht mehr aus der Listbox2 einen Eintrag wählen...

Kann mir jemand erklären warum?

Vielen Dank im Vorraus :)

  

Betrifft: AW: Problem mit Event von: fcs
Geschrieben am: 23.04.2014 11:27:40

Hallo ANNAnas,

wenn du auf einen Eintrag in der Listbox klicks, dann wird ja auch der Wert von Textbox1 vom Makro geändert und dadurch wird das Textbox1_Change-Makro gestartet.

Hier kommt es dann zu Rückkopplungseffekten.

Gruß
Franz


  

Betrifft: Verstehst du den Unterschied... von: EtoPHG
Geschrieben am: 23.04.2014 11:33:19

der beiden Events? Anna

_Change tritt nach jeder einzelnen Veränderung des Inhalts ein.
_Enter bevor das Control den Fokus erhält, das heisst (normalerweise) 1 mal.

Ich vermute mal bei einem Change hast du immer ne leere Listbox, da du jedesmal leerst aber die Bedingung erst wieder zutrifft, wenn irgendwo "-1" in der Textbox steht.

Was du da zusammenbastelst ist sowieso ziemlich undurchsichtig und gelinde gesagt seltsam... ;-)

Gruess Hansueli


  

Betrifft: AW: Verstehst du den Unterschied... von: ANNAnas
Geschrieben am: 23.04.2014 13:07:54

Ok, ich habe den Unterschied verstanden :)

Danke nochmals, habe es jetzt auch hinbekommen^^


  

Betrifft: und warum lässt du dann denn Thread offen (owT) von: EtoPHG
Geschrieben am: 23.04.2014 14:04:39




  

Betrifft: AW: und warum lässt du dann denn Thread offen (owT) von: ANNAnas
Geschrieben am: 23.04.2014 14:16:21

#close :D


 

Beiträge aus den Excel-Beispielen zum Thema "Problem mit Event"