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.

Änderung an Textbox und dann Listbox aktualisieren
#1
Nabend zusammen!

Ich hab mal mein altes und bisher nicht wirklich fertiges Projekt vorgekramt und bitte um eure Unterstützung.

Folgendes möchte ich erreichen:

Ich habe eine Userform, in der ich über die Eingabe in eine Textbox suchen kann. Sind mehrere identische Suchergebnis vorhanden, dann werden die in einer Listbox mit insgesamt 6 Spalten ausgegeben. Folgender Code kommt zum Einsatz:

Code:
Private Sub CommandButton20_Click()

On Error GoTo EERR

Dim Suche As String
Dim firstAddress
Dim i As Integer

'+---------------------------------------------------------------------------------------------+
'| Datensatz suchen                                                                            |
'+---------------------------------------------------------------------------------------------+

   If TextBox2.Text = "" Then
       MsgBox "Geben Sie bitte ein Aktenzeichen ein !"
   Exit Sub
   Else
       Suche = TextBox2.Text
       Set rngFind = Columns("B:B").Find(what:=Suche, lookat:=xlWhole, LookIn:=xlValues)
   If rngFind Is Nothing Then
   If MsgBox("Dieses Aktenzeichen existiert noch nicht!" & vbCrLf & vbCrLf & "Möchten Sie einen neuen Datensatz anlegen?", vbQuestion + vbYesNo, "Nachfragen") = vbYes Then
       Unload Me
       UserForm21.Show
   Else:
       Unload Me
       UserForm2.Show
   Exit Sub
   
   End If
   
   
   Else
   i = 0
   firstAddress = rngFind.Address
           Do
           
               ListBox1.AddItem
               ListBox1.List(i, 0) = rngFind.Offset(0, -1).Value
               ListBox1.List(i, 1) = rngFind
               ListBox1.List(i, 2) = rngFind.Offset(0, 1).Value
               ListBox1.List(i, 3) = rngFind.Offset(0, 2).Value
               ListBox1.List(i, 4) = rngFind.Offset(0, 16).Value
               ListBox1.List(i, 5) = rngFind.Offset(0, 17).Value
               
               Set rngFind = Columns("B:B").FindNext(rngFind)
               
               i = i + 1
               
           Loop While Not rngFind Is Nothing And rngFind.Address <> firstAddress
   
   End If
   End If
   
   If ListBox1.ListCount = 1 Then
       TextBox1.Text = rngFind.Offset(0, -1).Value
       TextBox2.Text = rngFind.Offset(0, 0).Value
       TextBox50.Text = rngFind.Offset(0, 0).Value
       TextBox3.Text = rngFind.Offset(0, 1).Value
       TextBox51.Text = rngFind.Offset(0, 1).Value
       TextBox4.Text = rngFind.Offset(0, 2).Value
       TextBox6.Text = rngFind.Offset(0, 3).Value
       ComboBox5.Text = rngFind.Offset(0, 4).Value
       ComboBox2.Text = rngFind.Offset(0, 5).Value
       CheckBox1 = rngFind.Offset(0, 6) = "X"
       ComboBox3.Text = rngFind.Offset(0, 7).Value
       TextBox10.Text = rngFind.Offset(0, 8).Value
       TextBox11.Text = rngFind.Offset(0, 9).Value
       TextBox45.Text = rngFind.Offset(0, 9).Value
       TextBox12.Text = rngFind.Offset(0, 10).Value
       TextBox46.Text = rngFind.Offset(0, 10).Value
       TextBox13.Text = rngFind.Offset(0, 11).Value
       TextBox47.Text = rngFind.Offset(0, 11).Value
       ComboBox1.Text = rngFind.Offset(0, 12).Value
       ComboBox4.Text = rngFind.Offset(0, 13).Value
       TextBox44.Text = rngFind.Offset(0, 14).Value
       TextBox16.Text = rngFind.Offset(0, 15).Value
       TextBox48.Text = rngFind.Offset(0, 16).Value
       TextBox52.Text = rngFind.Offset(0, 16).Value
       TextBox49.Text = rngFind.Offset(0, 17).Value
   
   ListBox1.Clear
   
   End If
   


Exit Sub
EERR:

End Sub

Das funtioniert soweit. Klicke ich auf einen Eintrag in der Listbox, wird der gewählte Eintrag in diversen Texbox-Felder ausgegeben. Hierfür verwende ich den folgenden Code:

Code:
Private Sub ListBox1_Click()

On Error GoTo EERR

Dim sSearch As String

   If ListBox1.ListCount > 1 Then
       sSearch = ListBox1.List(ListBox1.ListIndex, 0)
   Set rngFind = Columns("A:A").Find(what:=sSearch, lookat:=xlWhole, LookIn:=xlValues)
   
   If Not rngFind Is Nothing Then


   TextBox1.Text = rngFind.Offset(0, 0).Value
   TextBox2.Text = rngFind.Offset(0, 1).Value
   TextBox50.Text = rngFind.Offset(0, 1).Value
   TextBox3.Text = rngFind.Offset(0, 2).Value
   TextBox51.Text = rngFind.Offset(0, 2).Value
   TextBox4.Text = rngFind.Offset(0, 3).Value
   TextBox6.Text = rngFind.Offset(0, 4).Value
   ComboBox5.Text = rngFind.Offset(0, 5).Value
   ComboBox2.Text = rngFind.Offset(0, 6).Value
   CheckBox1 = rngFind.Offset(0, 7) = "X"
   ComboBox3.Text = rngFind.Offset(0, 8).Value
   TextBox10.Text = rngFind.Offset(0, 9).Value
   TextBox11.Text = rngFind.Offset(0, 10).Value
   TextBox45.Text = rngFind.Offset(0, 10).Value
   TextBox12.Text = rngFind.Offset(0, 11).Value
   TextBox46.Text = rngFind.Offset(0, 11).Value
   TextBox13.Text = rngFind.Offset(0, 12).Value
   TextBox47.Text = rngFind.Offset(0, 12).Value
   ComboBox1.Text = rngFind.Offset(0, 13).Value
   ComboBox4.Text = rngFind.Offset(0, 14).Value
   TextBox44.Text = rngFind.Offset(0, 15).Value
   TextBox16.Text = rngFind.Offset(0, 16).Value
   TextBox48.Text = rngFind.Offset(0, 17).Value
   TextBox52.Text = rngFind.Offset(0, 17).Value
   TextBox49.Text = rngFind.Offset(0, 18).Value

   
   End If
   sSearch = ""
   
   End If

Exit Sub
EERR:
End Sub

Auch das ändern das Ändern von Einträgen und Rückschreiben ins Tabellenblatt funktioniert.

Code:
Private Sub CommandButton13_Click()   'Änderungen an Daten speichern######
On Error GoTo EERR

Dim Letzte  As Long
Dim ctrElement As Control


'+---------------------------------------------------------------------------------------------+
'|   die Daten sind geprüft und können in die Tabelle eingetragen werden                       |
'+---------------------------------------------------------------------------------------------+
 
  Application.ScreenUpdating = True

  With Worksheets("WS_Wohn A")
     
       Set rngFind = .Cells(rngFind.Row, 1)
       
       rngFind.Offset(0, 1).Value = WorksheetFunction.Proper(TextBox50.Text)
       rngFind.Offset(0, 2).Value = WorksheetFunction.Proper(TextBox51.Text)
       rngFind.Offset(0, 3).Value = WorksheetFunction.Proper(TextBox4.Text)
       If IsNumeric(TextBox6.Text) Then rngFind.Offset(0, 4).Value = CDate(WorksheetFunction.Proper(TextBox6.Text)) Else rngFind.Offset(0, 4).Value = TextBox6.Text
       If IsNumeric(ComboBox5.Text) Then rngFind.Offset(0, 5).Value = CLng(WorksheetFunction.Proper(ComboBox5.Text)) Else rngFind.Offset(0, 5).Value = ComboBox5.Text
       rngFind.Offset(0, 6).Value = WorksheetFunction.Proper(ComboBox2.Text)
 
       If CheckBox1.Value = True Then
           rngFind.Offset(0, 7) = "X"
       Else
           rngFind.Offset(0, 7) = ""
       End If
     
       rngFind.Offset(0, 8).Value = WorksheetFunction.Proper(ComboBox3.Text)
       rngFind.Offset(0, 9).Value = WorksheetFunction.Proper(TextBox10.Text)
       If IsNumeric(TextBox11.Text) Then rngFind.Offset(0, 10).Value = CDate(WorksheetFunction.Proper(TextBox11.Text)) Else rngFind.Offset(0, 10).Value = TextBox11.Text
       If IsNumeric(TextBox12.Text) Then rngFind.Offset(0, 11).Value = CDate(WorksheetFunction.Proper(TextBox12.Text)) Else rngFind.Offset(0, 11).Value = TextBox12.Text
       If IsNumeric(TextBox13.Text) Then rngFind.Offset(0, 12).Value = CDate(WorksheetFunction.Proper(TextBox13.Text)) Else rngFind.Offset(0, 12).Value = TextBox13.Text
       rngFind.Offset(0, 13).Value = WorksheetFunction.Proper(ComboBox1.Text)
       rngFind.Offset(0, 14).Value = WorksheetFunction.Proper(ComboBox4.Text)
       If IsNumeric(TextBox44.Text) Then rngFind.Offset(0, 15).Value = CDate(WorksheetFunction.Proper(TextBox44.Text)) Else rngFind.Offset(0, 15).Value = TextBox44.Text
       rngFind.Offset(0, 16).Value = WorksheetFunction.Proper(TextBox16.Text)
       rngFind.Offset(0, 17).Value = WorksheetFunction.Proper(TextBox52.Text)
       rngFind.Offset(0, 18).Value = WorksheetFunction.Proper(TextBox49.Text)

       Letzte = IIf(.Range("A65536") <> "", 65536, .Range("A65536").End(xlUp).Row) + 1
       If Letzte < 2 Then Letzte = 2
     
  End With



Exit Sub
EERR:


End Sub

Hat jemand eine Lösung dafür, dass die Änderung auch an die Listbox übertragen wird, also wenn Änderung der Textboxen gespeichert wird auch die entsprechende Zeile in der Listbox aktualisiert wird (z.B. TExtBox50 ist der Listbox Spalte 1 zugeordnet).

Ich weiß, dass mein Code oben sich nicht schön ist, vielleicht kann mir mal jemand an einem Codeschnipsel zeigen, wie es richtig aussehen müsste.

Vielen Dank für Eure Hilfe
Grüße
Antworten Top
#2
Hi,

(26.05.2016, 19:47)sandormiles schrieb: Hat jemand eine Lösung dafür, dass die Änderung auch an die Listbox übertragen wird, also wenn Änderung der Textboxen  gespeichert wird auch die entsprechende Zeile in der Listbox aktualisiert wird (z.B. TExtBox50 ist der Listbox Spalte 1 zugeordnet).

ich habe jetzt keinen Code zur Hand, aber wie füllst Du denn die Listbox beim erstmaligen Aufrufen? Wenn Du diesen Codeteil einfach am Ende nochmal aufrufst?
[-] Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:
  • sandormiles
Antworten Top
#3
Das funktioniert. Vorher noch ein Listbox1.Clear eingefügt und dann sind auch keine Doppelungen vorhanden.

Danke Ralf!
Antworten Top


Gehe zu:


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