Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

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