von mir ein anderer Weg
27.09.2019 10:40:38
mir
Hallo Markus,
indem du deine Listbox1 im Userform_suchen um eine Spalte erweiterst. Im Eigenschaftenfenster ColumnCount auf 6 stellen.
In diese zusätzliche Spalte nimmst du einfach beim Suchen die Zeilennummer des jeweiligen Treffers mit auf.
Unter ColumnWidth stellst du dann die Breite deiner Spalten der Listbox ein. Hierbei stellst du die Breite der letzten Spalte (=Spalte 5) auf 0 ein. Damit werden dir die Einträge in der Listbox nicht angezeigt.
ColumnWidth 60 Pt;60 Pt;60 Pt;60 Pt;60 Pt;60 Pt;10 Pt
Die Spaltenbreite mußt du an deine Bedürfnisse anpassen. Ich hab jetzt mal die letzte Spalte auf 10 eingestellt, damit du die Einträge siehst. Wie schon gesagt, die dann auf 0 einstellen.
Jetzt kannst du dann beim "Zurückschreiben" von geänderten Daten über die Spalte 6 der Listbox auf die jeweilige Zeilennummer des Datensatzes zugreifen.
Code für die Userform_suchen:
Option Explicit
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub cmdSearch_Click()
Dim objSH As Worksheet
Dim rngSearch As Range
Dim strFirst As String
If txtSearch "" Then
ListBox1.Clear
Set objSH = Sheets("Aufgaben")
With objSH
Set rngSearch = .Range("A:E").Find(What:=txtSearch, LookIn:=xlValues, _
LookAt:=IIf(chkPart, xlWhole, xlPart), MatchCase:=IIf(chkCase, True, False))
If Not rngSearch Is Nothing Then
strFirst = rngSearch.Address
Do
ListBox1.AddItem .Cells(rngSearch.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(rngSearch.Row, 2)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(rngSearch.Row, 3)
ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(rngSearch.Row, 4)
ListBox1.List(ListBox1.ListCount - 1, 4) = .Cells(rngSearch.Row, 5)
'Aufnahme der Fundzeile in Spalte 6 der Listbox
ListBox1.List(ListBox1.ListCount - 1, 5) = rngSearch.Row
Set rngSearch = .Range("A:D").FindNext(rngSearch)
Loop While Not rngSearch Is Nothing And rngSearch.Address strFirst
Else
ListBox1.AddItem "Kein Treffer!"
End If
End With
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.Hide
UserForm1_Eingabefenster.Show
End Sub
Code für die Userform_Eingabefenster:
Option Explicit
Private Sub CommandButton1Speichern_Click()
With UserForm_suchen.ListBox1
'in Listbox1.List(.Listbox1.Listindex, 5) steht die Zeile
Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 1) = Me.ComboBox1_Name
Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 2) = Me.ComboBox2_Taetigkeit
Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 3) = Me.TextBox3Zusatzinformation
Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 4) = CDate(Me.TextBox4erhaltenam)
Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 5) = Me.TextBox5Kommentar
'einlesen des Kommentar aus der Tabelle Aufgaben
Me.TextBox5Kommentar = Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 5)
End With
Unload Me
UserForm_suchen.Show
End Sub
Private Sub CommandButton2Schliessen_Click()
Unload Me
UserForm_suchen.Show
End Sub
Private Sub TextBox5erledigtam_Change()
UserForm1_Eingabefenster.TextBox5erledigtam = Date
End Sub
Private Sub UserForm_Activate()
With UserForm_suchen
Me.ComboBox1_Name = .ListBox1.List(.ListBox1.ListIndex, 0)
Me.ComboBox2_Taetigkeit = .ListBox1.List(.ListBox1.ListIndex, 1)
Me.TextBox3Zusatzinformation = .ListBox1.List(.ListBox1.ListIndex, 2)
Me.TextBox4erhaltenam = .ListBox1.List(.ListBox1.ListIndex, 3)
End With
End Sub
Das Makro reagiert auf Doppelklick in der Listbox1.
Kann im Moment leider nichts hochladen.
Gruß Werner