Microsoft Excel

Herbers Excel/VBA-Archiv

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 TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

CommandButton Userform

Betrifft: CommandButton Userform von: Sleepyhead
Geschrieben am: 29.07.2020 00:57:25

Guten Morgen zusammen,
für jedes gelöste problem tritt das nächste auf ^^

Heute habe ich folgendes Problem,
ich habe eine funtionierende Userform die mir aus einem seperaten Worksheet Daten filtern kann.
Nun möchte ich meine letzten 20 Suchen durch einen Click in der Userform speichern lassen und dabei jeweils die letzte Suche zuoberst in dem Worksheet auf dem auch die Userform aufgerufen wird angezeigt bekommen und falls bereits 20 Suchen vorhanden sind den letzten Eintrag löschen lassen.

Versucht habe ich dies folgendermaßen:

Private Sub CommandButton2_Click()
    Dim s As Integer
    
    For s = 27 To 8 Step -1
        If ThisWorkbook.Worksheets("Matrix").Cells(8, 2).Value = "" Then
        
            ThisWorkbook.Worksheets("Matrix").Cells(8, 2).Value = UserForm1.ComboBox1.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 4).Value = UserForm1.ComboBox2.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 6).Value = UserForm1.TextBox2.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 8).Value = UserForm1.TextBox1.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 12).Value = UserForm1.TextBox4.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 14).Value = UserForm1.TextBox3.Value
            Exit Sub
            
        ElseIf ThisWorkbook.Worksheets("Matrix").Cells(8, 2).Value <> "" Then
        
            If ThisWorkbook.Worksheets("Matrix").Cells(s, 2).Value <> "" And s = 27 Then
                ThisWorkbook.Worksheets("Matrix").Rows(s).Value = ThisWorkbook.Worksheets(" _
Matrix").Rows(s - 1, 2).Value
                ThisWorkbook.Worksheets("Matrix").Rows(s - 1).Value = ""
                
            ElseIf ThisWorkbook.Worksheets("Matrix").Cells(s, 2).Value <> "" And s < 27 And s >  _
8 Then
                ThisWorkbook.Worksheets("Matrix").Rows(s).Value = ThisWorkbook.Worksheets(" _
Matrix").Rows(s - 1).Value
                ThisWorkbook.Worksheets("Matrix").Rows(s - 1).Value = ""
            End If
        End If
    Next s
End Sub
Wenn ich dies zum ersten mal ausführe funktioniert das auch wunderbar, die Daten werden in die erste Reihe (8) geschrieben. Möchte ich nun aber die nächste Suche speichern so passiert nix, die Daten in der ersten Zeile werden nicht überschrieben oder verschoben.

Wo liegt mein Denkfehler?

Vielen Dank für eure Mühe und liebe Grüße
Sleepyhead

Betrifft: AW: CommandButton Userform
von: Matthias
Geschrieben am: 29.07.2020 10:29:00

Moin!
In deinem else bzw. elseif Konstrukt am Ende behandelst du nicht alle Fälle. Du hast nur s = 27 und 8 Um deinen Code aber nicht zu kompliziert zu machen, würde ich an deiner Stelle bei einem speichern den Bereich B8:N26 kopieren und nach B3 kopieren. Anschließend einfach deine Daten in Zeile 8 kopieren. Damit hast du nur einen Kopiervorgang und brauchst nicht immer zu unterscheiden. Sollte schneller gehen. Könnte bspw. so aussehen (ungetestet):
Private Sub CommandButton2_Click()

Range("B8:N26").Copy Range("B9")

ThisWorkbook.Worksheets("Matrix").Cells(8, 2).Value = UserForm1.ComboBox1.Value
ThisWorkbook.Worksheets("Matrix").Cells(8, 4).Value = UserForm1.ComboBox2.Value
ThisWorkbook.Worksheets("Matrix").Cells(8, 6).Value = UserForm1.TextBox2.Value
ThisWorkbook.Worksheets("Matrix").Cells(8, 8).Value = UserForm1.TextBox1.Value
ThisWorkbook.Worksheets("Matrix").Cells(8, 12).Value = UserForm1.TextBox4.Value
ThisWorkbook.Worksheets("Matrix").Cells(8, 14).Value = UserForm1.TextBox3.Value

End Sub

VG

Betrifft: AW: CommandButton Userform
von: Sleepyhead
Geschrieben am: 29.07.2020 23:40:06

Danke für deine Antwort Matthias,

leider hat mir das nicht so sehr geholfen da ich in meiner Suchleiste wirklich nur 20 Einträge sehen möchte und die letzte Suche zuoberst gespeichert werden soll.

Hiermit funktioniert es jetzt glücklicherweise.
Danke für den Hinweis, dass ich nicht alle Fälle abgefragt habe, dadurch habe ich meinen Fehler festgestellt. Wenn natürlich noch keine 20 Einträge vorhanden sind, dann greift der Sub nicht, sonder schreibt nur die aktuellen Daten in die erste Zeile.
Private Sub CommandButton2_Click()
    Dim s As Integer
    
    On Error Resume Next
    
    For s = 27 To 8 Step -1
                       
        If s <= 27 And s > 8 Then
            ThisWorkbook.Worksheets("Matrix").Rows(s).Value = ThisWorkbook.Worksheets("Matrix"). _
Rows(s - 1).Value
                
        ElseIf s = 8 Then
            ThisWorkbook.Worksheets("Matrix").Cells(8, 2).Value = UserForm1.ComboBox1.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 4).Value = UserForm1.ComboBox2.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 6).Value = UserForm1.TextBox2.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 8).Value = UserForm1.TextBox1.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 12).Value = UserForm1.TextBox4.Value
            ThisWorkbook.Worksheets("Matrix").Cells(8, 14).Value = UserForm1.TextBox3.Value
        End If
    Next s
                
End Sub
Hiermit ist das ganze jetzt gelöst und funktioniert einwandfrei!

LG
Sleepyhead

Beiträge aus dem Excel-Forum zum Thema "CommandButton Userform"