Daten select für Userform und einlesen

Betrifft: Daten select für Userform und einlesen
von: Richi
Geschrieben am: 06.10.2020 11:56:28
Sali Zäme
Ich komme nicht weiter….
Ich möchte folgendes machen:
Über Userform und Combobox (Datum aus bestehender Tabelle erstellen). Diesen Teil konnte ich lösen.
Nun möchte ich über die Selektion eines in Combobox stehenden Datums alle Tabelleneinträge in UserForm anzeigen (in Tabelle können pro Datum 1:7 Einträge sein). Mit den Daten in den Textboxen will ich Korrekturen anbringen diese anschliessend wieder in richtiger Zelle der Tabelle abspeichern. Daten in Tabelle sind nach Datum sortiert.
Ich steh Hoffnungslos an mit meinen VBA Kenntnissen.
Hoffe da kann mir jemand helfen.
Liebe Gruess
Richi
https://www.herber.de/bbs/user/140691.xlsm

Betrifft: AW: Daten select für Userform und einlesen
von: Nepumuk
Geschrieben am: 06.10.2020 12:49:13
Hallo Richi,
teste mal:
Option Explicit
Dim mlngFirstRow As Long, mlngCount As Long
Private Sub ComboBox1_Change()
Dim dtmDate As Date
Dim lngRow As Long
dtmDate = CDate(ComboBox1.Value)
mlngCount = 0
Call ClearTextBoxes
With ThisWorkbook.Worksheets("Quelle")
For lngRow = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
If .Cells(lngRow, 1).Value = dtmDate Then
If mlngCount = 0 Then mlngFirstRow = lngRow
mlngCount = mlngCount + 1
Controls("TextBox" & CStr(mlngCount)).Text = .Cells(lngRow, 2).Value
Controls("TextBox" & CStr(mlngCount + 7)).Text = .Cells(lngRow, 3).Value
End If
If .Cells(lngRow, 1).Value > dtmDate Then Exit For
Next
End With
End Sub
Private Sub CommandButton1_Click()
Dim lngRow As Long, lngIndex As Long
With ThisWorkbook.Worksheets("Quelle")
For lngRow = mlngFirstRow To mlngFirstRow + mlngCount - 1
lngIndex = lngIndex + 1
.Cells(lngRow, 2).Value = Controls("TextBox" & CStr(lngIndex)).Text
.Cells(lngRow, 3).Value = Controls("TextBox" & CStr(lngIndex + 7)).Text
Next
End With
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub TextBox14_Change()
End Sub
Private Sub UserForm_Initialize()
Dim lngRow As Long
With ThisWorkbook.Worksheets("Quelle")
For lngRow = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If Application.CountIf(.Range(.Cells(2, 1), .Cells(lngRow, 1)), .Cells(lngRow, 1).Value) = 1 Then
ComboBox1.AddItem .Cells(lngRow, 1).Text
End If
Next
End With
End Sub
Private Sub ClearTextBoxes()
Dim lngIndex As Long
For lngIndex = 1 To 14
Controls("TextBox" & CStr(lngIndex)).Text = vbNullString
Next
End Sub
Gruß
Nepumuk

Betrifft: AW: Daten select für Userform und einlesen
von: Richi
Geschrieben am: 06.10.2020 13:21:41
Hallo Nepumuk
Funktioniert einwandfrei. Ich danke dir herzlich.
Was wäre, wenn ich einen Nachtrag in eine der leeren Zellen hinzufügen möchte. Ich weiss das war nicht meine ursprüngliche Frage.
Gruss Richi

Betrifft: AW: Daten select für Userform und einlesen
von: Nepumuk
Geschrieben am: 06.10.2020 13:40:58
Hallo Richi,
kein Problem:
Private Sub CommandButton1_Click()
Dim lngRow As Long, lngIndex As Long
With ThisWorkbook.Worksheets("Quelle")
For lngRow = mlngFirstRow To mlngFirstRow + mlngCount - 1
lngIndex = lngIndex + 1
.Cells(lngRow, 2).Value = Controls("TextBox" & CStr(lngIndex)).Text
.Cells(lngRow, 3).Value = Controls("TextBox" & CStr(lngIndex + 7)).Text
Next
Do
lngIndex = lngIndex + 1
If lngIndex = 8 Then Exit Do
If Controls("TextBox" & CStr(lngIndex)).Text <> vbNullString Then
lngRow = mlngFirstRow + lngIndex - 1
.Rows(lngRow).Insert
.Range(.Cells(lngRow, 1), .Cells(lngRow, 3)).Value = Array( _
CDate(ComboBox1.Value), _
Controls("TextBox" & CStr(lngIndex)).Text, _
Controls("TextBox" & CStr(lngIndex + 7)).Text)
Else
Exit Do
End If
Loop
End With
End Sub
Gruß
Nepumuk

Betrifft: AW: Daten select für Userform und einlesen
von: Richi
Geschrieben am: 06.10.2020 13:49:13
Ist ja der Hammer.
Nochmals herzlichen Dank
Liebe Gruess
Richi