26.05.2016, 19:47
(Dieser Beitrag wurde zuletzt bearbeitet: 26.05.2016, 19:51 von sandormiles.)
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:
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:
Auch das ändern das Ändern von Einträgen und Rückschreiben ins Tabellenblatt funktioniert.
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
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