Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
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
VBA UserForm / Speichern freie Zeile
07.02.2022 10:20:22
Kuni
Guten Morgen zusammen,
da mir hier schon einmal geholfen wurde, möchte ich mich heute erneut mit einem Anliegen an Euch wenden.
Ich habe mir eine Eingabemaske per UserForm gebastelt mit einem CommandButton, der die Daten aus den TexBox-, DTPicker- und ComboBoxen in die angegebenen Zeilen einfügt. Dieser funktioniert soweit auch, was ich allerdings nicht hin bekomme ist, dass die Daten in die nächste freie Zeile im aktivierten Tabellenblatt eingefügt werden. Momentan werden diese immer wieder überschrieben.

Private Sub CommandButton1_Click()
Dim FinalRow As Integer
FinalRow = Cells(Rows.Count, 4).End(xlUp).Row + 1
FinalRow = ActiveCell.Row + 1
Cells(4, 12).Value = UserForm1.TextBox1.Value
Cells(4, 11).Value = UserForm1.TextBox4.Value
Cells(4, 13).Value = UserForm1.TextBox5.Value
Cells(4, 14).Value = UserForm1.TextBox6.Value
Cells(4, 15).Value = UserForm1.TextBox7.Value
Cells(4, 16).Value = UserForm1.TextBox8.Value
Cells(4, 18).Value = UserForm1.TextBox9.Value
Cells(4, 22).Value = UserForm1.TextBox10.Value
Cells(4, 21).Value = UserForm1.TextBox11.Value
Cells(4, 8).Value = UserForm1.DTPicker1.Value
Cells(4, 9).Value = UserForm1.DTPicker2.Value
Cells(4, 17).Value = UserForm1.ComboBox2.Value
Cells(4, 20).Value = UserForm1.ComboBox3.Value
End Sub
Danke
Grüße Kuni

34
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA UserForm / Speichern freie Zeile
07.02.2022 10:36:10
{Boris}
Hi,
Du ermittelst erst die nächste freie Zeile, überschreibst den Wert dann mit der aktiven Zeile + 1, um dann die Werte in der Zeile 4 (Cells(4, ...) fest zu verdrahten - das kann ja nicht gehen. Zudem deklariert man Zeilenvariablen als Long.

Private Sub CommandButton1_Click()
Dim FinalRow As Long
FinalRow = Cells(Rows.Count, 4).End(xlUp).Row + 1
Cells(FinalRow, 12).Value = UserForm1.TextBox1.Value
'usw. usw.
End Sub
VG, Boris
AW: VBA UserForm / Speichern freie Zeile
07.02.2022 11:12:13
Kuni
Hallo Boris,
Hallo Karin,
danke für Eure schnelle Antwort. Ich habe natürlich versucht, mein Problem über bereits bestehenden Lösungsvorschlägen aus dem Forum zu lösen, ohne Erfolg ;-). @ Boris: Ich habe den Code angepasst, aber nun werden die Daten nicht mehr eingefügt.
Anzeige
Nicht nachvollziehbar...
07.02.2022 11:22:15
{Boris}
Hi,
...der Code in Deiner Beispielmappe ist prinzipiell korrekt. Du ermittelst halt die nächste freie Zeile in Spalte 4 (=D). Da sollte halt auch immer was eingetragen werden, da ansonsten wieder überschrieben wird.
VG, Boris
AW: Nicht nachvollziehbar...
10.02.2022 13:39:00
GerdL
Moin,
ich denke, dass er dies bereits kapiert hattte.
Ohne Feinabstimmung:

Dim FinalRow As Long, MinRow As Long
FinalRow = Cells(Rows.Count, 4).End(xlUp).Row + 1 'Meßlatte in Spalte D
If ActiveSheet.FilterMode Then If ActiveSheet.AutoFilterMode Then MinRow = _
ActiveSheet.AutoFilter.Range.Row + ActiveSheet.AutoFilter.Range.Rows.Count
If FinalRow 
Gruß Gerd
Anzeige
AW: Nicht nachvollziehbar...
10.02.2022 15:53:02
Kuni
Hallo Gerd,
vielen Dank für die schnelle Zuarbeit. Es ist fast richtig ;-) , in der original Tabelle von mir werden die Daten in Zeile D4:X5012 fest eingetragen, da weitere Daten aus diesen Bereichen ausgelesen werden. Mit deinem Vorschlag werden die Daten unterhalb des fest definierten Bereichs (bei der Verwendung des Filters) eingefügt. Es ist für mich wichtig, die aktuelle Filterienstellung beizubehalten, da die Eingabe von weiteren Daten über die Eingabemaske mir genau diesen Arbeitsaufwand (die Filter neu setzen) ersparen soll.
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
07.02.2022 10:37:22
Beverly
Hi,
du ermittelst doch die erste freie Zeile - weshalb verwendest du dann beim Eintragen Zeile 4 anstelle dieser Zeile - also

Cells(Finalrow, 12).Value
Außerdem sollte man Zeilenvariablen besser als Long deklarieren, da man ja nicht weiß, wieviele Daten man letztendlich hat.
Und wozu die Zeile FinalRow = ActiveCell.Row + 1? Mit der Zeile FinalRow = Cells(Rows.Count, 4).End(xlUp).Row + 1 hast du die erste freie Zeile doch bereits ermittelt. Du hast außerdem ein Problem, wenn ActiveCell nicht die letzte belegte Zelle sondern irgendeine andere Zelle war.
Bis später
Karin

Anzeige
AW: VBA UserForm / Speichern freie Zeile
07.02.2022 11:24:11
Beverly
Du ermittelst die letzte belegte Zeile in Spalte 4 - in dieser Spalte steht aber nichts, also wird als erste freie Zeile immer als 4 errechnet. Benutze eine andere Spalte und zwar eine, in die auf jeden Fall etwas eingetragen wird.
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
07.02.2022 11:39:42
Kuni
Hallo Karin,
macht Sinn :-D . jetzt klappt es !
Danke Euch !
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
10.02.2022 12:51:11
Kuni
Ich habe dann doch nochmal einen Frage.
Wenn ich die Tabelle nach bestimmten Kriterien gefiltert habe und einen neuen Eintrag über die Eingabemaske tätige, werden die neuen Daten nicht in die nächste freie Zeile der gesamten Tabelle geschrieben sondern in die letzte Zeile im aktiven Filter. Das ist natürlich nicht gut, denn es werden daurch bestehende Datensätze überschrieben. Habt Ihr dafür eventuell eine Lösung ? Die neuen Daten sollten schon in die wirklich nächste freie Zeile eingfügt werden.
Danke
Grüße Kuni
Anzeige
AW: VBA UserForm / Speichern freie Zeile
10.02.2022 14:29:37
Beverly
Hi Kuni,
der einfachste Weg: setze den Autofilter zurück bevor du neue Daten einträgst. Oder versuche es so:

Dim lngFrei As Long
With ActiveSheet.AutoFilter.Range
lngFrei = .Rows(1).Row + .Rows.Count
End With
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
10.02.2022 15:56:42
Kuni
Hallo Karin,
Danke! bisher ist Gerd sein Vorschlag ist das was ich benötige.
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
10.02.2022 16:36:33
Beverly
Hi Kuni,
und mein Code ermittelt die erste freie Zeile falsch? Dem würde ich vehemt widersprechen wollen. ;-)
Bis später
Karin

Anzeige
AW: VBA UserForm / Speichern freie Zeile
10.02.2022 19:07:50
Kuni
Hallo Karin,
bei deinem Code bekomme ich einen Laufzeitfehler 1004 Anwendungs- oder objektdefinierter Fehler
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
10.02.2022 19:15:18
GerdL
Moin Kuni,
ich behaupte, dein aktives Blatt hat keinen Autofilter.
Gruß Gerd
AW: VBA UserForm / Speichern freie Zeile
11.02.2022 08:16:35
Sven
Guten Morgen Karin,
Guten Morgen Gerd,
ich habe mich vielleicht falsch ausgedrückt. Ich habe ab Zeile 3 in den Spalten A - R eine Filteroption hinterlegt, um nach unterschiedlichen Werten suchen zu können. Ich möchte nun über die Eingabemaske neue Einträge erfassen (was auch funktioniert), um eben nicht erst die eventuell aktivierten Filter in den Tabellenblättern rausnehmen zu müssen.
Anbei nochmal die Excel ( https://www.herber.de/bbs/user/151055.zip )
Grüße Kuni
Anzeige
AW: VBA UserForm / Speichern freie Zeile
10.02.2022 19:27:30
Beverly
Hi Kuni,
dieser Fehler tritt auf, wenn das angesprochene Tabellenblatt keinen Autofilter hat - im Code ist es das aktive Tabellenblatt, ich weiß nicht, auf welches Blatt du dich beziehst.
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
11.02.2022 08:37:16
Sven
Guten Morgen Karin,
genau das wird auch über die Eingabemaske aktiviert. Ich habe gerade Gerd geantwortet, wie ich das meine und ich habe nochmal meine Excel hochgeladen .
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
11.02.2022 11:14:31
Beverly
Hi Kuni,
das Problem in deiner Mappe ist, dass du bereits viele Zeilen mit Rahmen versehen hast und diese automatisch zum Autofilterbereich gezählt werden, weshalb die letzte belegte Zeile nicht korrekt ermittelt werden kann.
Ich empfehle dir, stattdessen eine intelligente Tabelle zu verwenden - diese erweitert automatisch die Formatierung sobald ein neuer Datensatz hinzukommt. Dann kannst du folgenden Code verwenden:

Private Sub CommandButton1_Click()
Dim FinalRow As Long
FinalRow = ActiveSheet.ListObjects(1).ListRows.Count + 4
Cells(FinalRow, 12).Value = UserForm1.TextBox1.Value
Cells(FinalRow, 11).Value = UserForm1.TextBox4.Value
Cells(FinalRow, 13).Value = UserForm1.TextBox5.Value
Cells(FinalRow, 14).Value = UserForm1.TextBox6.Value
Cells(FinalRow, 15).Value = UserForm1.TextBox7.Value
Cells(FinalRow, 16).Value = UserForm1.TextBox8.Value
Cells(FinalRow, 18).Value = UserForm1.TextBox9.Value
Cells(FinalRow, 22).Value = UserForm1.TextBox10.Value
Cells(FinalRow, 21).Value = UserForm1.TextBox11.Value
Cells(FinalRow, 8).Value = UserForm1.TextBox13.Value
Cells(FinalRow, 9).Value = UserForm1.TextBox12.Value
Cells(FinalRow, 17).Value = UserForm1.ComboBox2.Value
Cells(FinalRow, 20).Value = UserForm1.ComboBox3.Value
End Sub
Bis später
Karin

Anzeige
AW: VBA UserForm / Speichern freie Zeile
12.02.2022 09:54:32
Sven
Guten Morgen Karin,
ok, eine intelligente Tabelle habe ich noch nicht gebaut ;-) Hättest Du eventuell ein Beispiel, das ich es nachvollziehen kann ? Ich habe natürlich auch noch einige Formeln in der originalen Tabelle, daher auch die festgelegten Bereiche. Wie würde sich das Thema bei einer intelligenten Tabelle verhalten?
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
12.02.2022 18:26:25
Sven
Danke Karin,
ich wollte Dir gerade antworten. Ich habe mich natürlich auch mit dem Thema beschäftigt und die Tabellen nach deinem Vorschlag umgestellt und nun funktioniert auch dein Code ;-). Ich habe aber nun festgestellt, dass nun meine gefilterten Daten nicht mehr richtig in die Planungstabelle kopiert werden. Es werden jetzt auch frei nicht beschriebene Zeilen übergeben. Ich hatte ja zuvor einen festen Bereich, wo man die Daten einträgt, was ja nun durch die intelligente Tabelle übernommen wird. Ich habe dazu folgenden Code bisher verwendet.
Dim R As Range
Set R = Intersect(ActiveSheet.Range("J4:X5012"), ActiveSheet.UsedRange).SpecialCells(xlCellTypeVisible)
If R Is Nothing Then Exit Sub
R.Copy
With Worksheets("Planung")
.Range("D" & .Cells(Rows.Count, "E").End(xlUp).Row + 1).PasteSpecial
End With
Application.CutCopyMode = False
End Sub
Kannst Du mir dazu auch noch Helfen ?
Grüße Sven
Anzeige
AW: VBA UserForm / Speichern freie Zeile
12.02.2022 20:11:55
Beverly
Hi Sven,
versuche es mal so:

Set R = Intersect(Columns("J:X"), ActiveSheet.ListObjects(1).DataBodyRange).SpecialCells(xlCellTypeVisible)
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
12.02.2022 20:15:14
Sven
Funktioniert :-) Danke Karin !!!!
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
17.02.2022 10:08:47
Kuni
Hallo Karin,
ich habe dann doch nochmal eine Frage. Ist es möglich, bei den nun intelligenten Tabellen und deinem Code auch einen Blattschutz zu nutzen? Bisher funktioniert der Code ohne Blattschutz super ;-) nur möchte ich bestimmte Zellen vor Eingaben schützen.
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
17.02.2022 10:25:18
Beverly
Hi Kuni,
entsperre die Zellen, in welche Eingaben erfolgen dürfen und setze dann den Blattschutz. Im Code hebst du ihn vor Beginn des Eintrags in die Zellen auf und setzt ihn am Ende wieder.
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
17.02.2022 10:30:06
Kuni
Hallo Karin,
ich meinte den Code für die Eingabemaske :-)

Private Sub CommandButton1_Click()
Dim FinalRow As Long
FinalRow = ActiveSheet.ListObjects(1).ListRows.Count + 4
Cells(FinalRow, 13).Value = UserForm1.TextBox1.Value
Cells(FinalRow, 12).Value = UserForm1.TextBox4.Value
Cells(FinalRow, 14).Value = UserForm1.TextBox5.Value
Cells(FinalRow, 15).Value = UserForm1.TextBox6.Value
Cells(FinalRow, 16).Value = UserForm1.TextBox7.Value
Cells(FinalRow, 17).Value = UserForm1.TextBox8.Value
Cells(FinalRow, 19).Value = UserForm1.TextBox9.Value
Cells(FinalRow, 23).Value = UserForm1.TextBox10.Value
Cells(FinalRow, 22).Value = UserForm1.TextBox11.Value
Cells(FinalRow, 9).Value = UserForm1.TextBox12.Value
Cells(FinalRow, 10).Value = UserForm1.DTPicker2.Value
Cells(FinalRow, 18).Value = UserForm1.ComboBox2.Value
Cells(FinalRow, 21).Value = UserForm1.ComboBox3.Value
Cells(FinalRow, 1).Value = UserForm1.TextBox16.Value
Cells(FinalRow, 2).Value = UserForm1.TextBox15.Value
Cells(FinalRow, 8).Value = UserForm1.TextBox17.Value
End Sub
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
17.02.2022 10:35:57
Beverly
Hi Kuni,
ja, den meinte ich auch - dort zu Beginn den Blattschutz aufheben und am Ende wieder setzen.
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
17.02.2022 10:55:49
Kuni
Ok,
würdest Du mich dabei nochmal unterstützen? Ich bin mittlerweile soweit, die VBA nachvollziehen zu können (glaube ich :-D) aber wie man die Befehle dazu schreibt, da bin ich noch weit entfernt.
Grüße Kuni
AW: VBA UserForm / Speichern freie Zeile
17.02.2022 12:23:59
Beverly
Hi Kuni,
der einfachste Weg, wenn man einen Befehl nicht kennt ist, den Makrorekorder zu verwenden und dabei alle Schritte so auszuführen wie man normalerweise vorgehen würde - der Makrorekorder zeichnet alles auf. Am Ende kann man den aufgezeichneten Code dann an seine Bedürfnisse noch anpassen. Versuche es also einfach mal.
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
17.02.2022 15:05:49
Kuni
Hallo Karin,
ja das habe ich versucht, nur kann ich dann die Eingabemaske, die ja die Daten in das jeweilige Excelblatt weitergibt, nicht starten.
Ich habe es folgendermaßen versucht, nur erscheint dann immer wieder der Fehler ( Fehler beim kompilieren, Variable nicht definiert )

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect Password:="Passwort"
FinalRow = ActiveSheet.ListObjects(1).ListRows.Count + 4
Cells(FinalRow, 13).Value = UserForm1.TextBox1.Value
Cells(FinalRow, 12).Value = UserForm1.TextBox4.Value
Cells(FinalRow, 14).Value = UserForm1.TextBox5.Value
Cells(FinalRow, 15).Value = UserForm1.TextBox6.Value
Cells(FinalRow, 16).Value = UserForm1.TextBox7.Value
Cells(FinalRow, 17).Value = UserForm1.TextBox8.Value
Cells(FinalRow, 19).Value = UserForm1.TextBox9.Value
Cells(FinalRow, 23).Value = UserForm1.TextBox10.Value
Cells(FinalRow, 22).Value = UserForm1.TextBox11.Value
Cells(FinalRow, 9).Value = UserForm1.TextBox12.Value
Cells(FinalRow, 10).Value = UserForm1.DTPicker2.Value
Cells(FinalRow, 18).Value = UserForm1.ComboBox2.Value
Cells(FinalRow, 21).Value = UserForm1.ComboBox3.Value
Cells(FinalRow, 1).Value = UserForm1.TextBox16.Value
Cells(FinalRow, 2).Value = UserForm1.TextBox15.Value
Cells(FinalRow, 8).Value = UserForm1.TextBox17.Value
ActiveSheet.Protect Passwort:="Passwort"
End Sub
Gruß Kuni
AW: VBA UserForm / Speichern freie Zeile
17.02.2022 15:11:51
Beverly
Hi Kuni,
vergleiche doch mal die 1. und die letzte Zeile innerhalb der Sub Buchstabe für Buchstabe - beim genauen Hinsehen fällt dir bestimmt auf, wo der Fehler liegt.
Bis später
Karin

AW: VBA UserForm / Speichern freie Zeile
17.02.2022 16:48:44
Kuni
Hallo Karin,
Ok, :-D zwei Fehler gefunden "Password" und das "Dim FinalRow As Long" hat gefehlt. Jetzt wird es übernommen und funktioniert soweit. Wenn ich jetzt aber die Daten gefiltert habe und ich einen Eintrag mache, funktioniert das auch. Schliesse ich aber die Eingabemaske und möchte den Filter verändern bzw. raus nehmen, ist die Zeile 3 wo die Filterfunktionen sind, jetzt gesperrt.

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect Password:="Pass"
Dim FinalRow As Long
FinalRow = ActiveSheet.ListObjects(1).ListRows.Count + 4
Cells(FinalRow, 13).Value = UserForm1.TextBox1.Value
Cells(FinalRow, 12).Value = UserForm1.TextBox4.Value
Cells(FinalRow, 14).Value = UserForm1.TextBox5.Value
Cells(FinalRow, 15).Value = UserForm1.TextBox6.Value
Cells(FinalRow, 16).Value = UserForm1.TextBox7.Value
Cells(FinalRow, 17).Value = UserForm1.TextBox8.Value
Cells(FinalRow, 19).Value = UserForm1.TextBox9.Value
Cells(FinalRow, 23).Value = UserForm1.TextBox10.Value
Cells(FinalRow, 22).Value = UserForm1.TextBox11.Value
Cells(FinalRow, 9).Value = UserForm1.TextBox12.Value
Cells(FinalRow, 10).Value = UserForm1.DTPicker2.Value
Cells(FinalRow, 18).Value = UserForm1.ComboBox2.Value
Cells(FinalRow, 21).Value = UserForm1.ComboBox3.Value
Cells(FinalRow, 1).Value = UserForm1.TextBox16.Value
Cells(FinalRow, 2).Value = UserForm1.TextBox15.Value
Cells(FinalRow, 8).Value = UserForm1.TextBox17.Value
ActiveSheet.Protect Password:="Pass"
End Sub

AW: VBA UserForm / Speichern freie Zeile
17.02.2022 16:59:45
Beverly
Hi Kuni,
du musst den Blattschutz so setzen, dass du den Autofilter verwenden kannst. Schau dazu mal bei den Einstellungen für den Blattschutz - dort gibt es die entsprechende Option, die dafür aktiviert werden muss.
Bis später
Karin

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige