Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1772to1776
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CommandButton Userform

CommandButton Userform
29.07.2020 00:57:25
Sleepyhead
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   _
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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CommandButton Userform
29.07.2020 10:29:00
Matthias
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
Anzeige
AW: CommandButton Userform
29.07.2020 23:40:06
Sleepyhead
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  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
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige