Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: nächste Zeile

VBA: nächste Zeile
23.08.2004 10:42:36
Marsi
Hallo zusammen!
Ich komme nicht weiter.Ih habe folgenden VBA-Befehl:
Dim Zeile As Long
Zeile = Range("A65536").End(xlUp).Offset(1, 0).Row
Mit diesem Befehl springe ich automatisch in die nächste Zeile, wenn in der 1. Zeile schon was steht....
So weit so gut. Ich möchte nun aber, dass erst geprüft wird ob die Zelle in der Tabelle noch leer ist. Wenn sie noch leer ist soll dann dort hinein geschrieben werden. Ein Beispiel:
Textbox1 Vorname Spalte A
Textbox2 Nachname Spalte B
In Zelle A1 steht ein Tim, B1 ist leer. Nun soll Textbox 2 auch das Feld B1 füllen und nicht wie bei meinem Befehl oben B2.
Kommt rüber was ich will?

Danke schon mal im voraus....
Marsi
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: nächste Zeile
23.08.2004 11:47:38
Marcl
Hi Marsi,

Sub d()
Range("A1").Select
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
' weitere Bearbeitung eine Zelle tiefer
Else
Exit Sub
End If
' weitere Bearbeitung in gleicher Zelle
End Sub

Gruß
Marcl
AW: VBA: nächste Zeile
23.08.2004 13:16:15
Marsi
Hallo Marcl,
ich glaub das geht schon in die Richtung was ich brauche. Dein Script bezieht sich aber auf die Zelle A1, richtig? heißt, dass ich müsste das bei jeder textbox schreiben? irgendwie versteh ich die funktionsweise nicht richtig...kannste mir das mal erklären?
Danke
Anzeige
AW: VBA: nächste Zeile
23.08.2004 13:23:51
Marcl
Bezieht sich auf diese Nachricht:
Hi Marsi,


Sub d()
' Beginn in Zelle A1
Range("A1").Select
' wenn active Zelle nicht leer ist (<>"")
If ActiveCell <> "" Then
' dann von aktiver Zelle eine weiter nach unten
ActiveCell.Offset(1, 0).Select
' hier kann dann der Wert aus der Textbox eingetragen werden (eine Zeile tiefer)
' wenn die Zelle leer ist, dann
Else
' hier kann dann der Wert aus der Textbox eingetragen werden (gleiche Zeile)
' beendet die wenn, sonst Abfrage
End If
' beendet das Makro
End Sub

Wie man die Textboxeinträge in die Zellen bekommt, ist Dir bekannt?
Gruß
Marcl
Anzeige
AW: VBA: nächste Zeile
23.08.2004 13:53:08
Marsi
Hi,
also ich übertrage immer mit dem Range-Befehl.

Private Sub CommandButton1_Click()
Range("A1").Select
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
Range("A1") = TextBox1.Text (diesen wert schreibt er immer nicht ins Tabellenblatt)
' weitere Bearbeitung eine Zelle tiefer
Else
Range("B1") = TextBox2.Text
Exit Sub
End If
' weitere Bearbeitung in gleicher Zelle
also ich versuch das mal zu verstehen....ich habe da echt ein brett vor dem kopf....
das script schaut in zelle a1 nach ob da schon was steht....steht da nix sollte es ja in zelle a1 was reinschreiben, aber irgendwie tuts das bei mir nicht....bei mir bleibt die zelle a1 immer leer.
ich bin echt am verzweifeln.
Anzeige
AW: VBA: nächste Zeile
23.08.2004 14:21:27
Marsi
so jetzt habe ich es geblickt!
Also dein VBA macht folgendes. es schaut nach, ob in zeile a1 was drin steht wenn nicht, dann schreibts was rein, wenn doch dann hüpfts ne zeile tiefer, aber ab da schreibts dann nix mehr rein. Weil es ja bloß in Zelle A1 nachsieht. aber es müsste dann ja in zelle b1 nachsehen, damit ne endlosschleife endsteht oder? auf jeden fall geht es dann in der zweiten zeile nicht mehr weiter....
Anzeige
AW: VBA: nächste Zeile
23.08.2004 14:38:24
Marcl
was ist TextBox1.txt?
ich versteh Dich nicht ganz. Geht es vielleicht um InputBox?

Private Sub CommandButton1_Click()
Name = InputBox("Vorname")
Range("A1").Select
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
ActiveCell = Name
Else
ActiveCell = Name
End If
Nachname = InputBox("Nachnname")
Range("B1").Select
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
ActiveCell = Nachname
Else
ActiveCell = Nachname
End If
End Sub

Anzeige
AW: VBA: nächste Zeile
23.08.2004 15:13:49
Marsi
Hallo,
ich habe mal ne beispiel datei hochgeladen. So soll es sein nur, dass in meinem Beispiel nur eine zeile gefüllt ist. Ich möchte, dass wenn auf der Position datum schon was steht und mann möchte noch einen Vornamen oder nachnamen hinzufügen dann soll das funktionieren. Sowie man aber ein neues datum eingibt soll dann alles komplett in die nächste zeile rutschen

Die Datei https://www.herber.de/bbs/user/9970.xls wurde aus Datenschutzgründen gelöscht

Anzeige
AW: VBA: nächste Zeile
23.08.2004 15:46:48
Marcl
Jaja, mein Brett vor dem Kopf war schon ein ganzer Zaun.
Hier der funktionierende Code für Deine UserForm

Private Sub CommandButton1_Click()
Datum = TextBox1.Value
' Suche Spalte A nach erster leerer Zelle
Columns("A:A").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
' Active Zelle Datum eintragen
ActiveCell = Datum
Vorname = TextBox2.Text
' Suche Spalte B nach erster leerer Zelle
Columns("B:B").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
' Active Zelle Vorname eintragen
ActiveCell = Vorname
Nachname = TextBox3.Text
' Suche Spalte C nach erster leerer Zelle
Columns("C:C").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
' Active Zelle Nachname eintragen
ActiveCell = Nachname
Range("a1").Select
End Sub


Private Sub CommandButton2_Click()
Unload UserForm1
End Sub


Gruß
Marcl
Anzeige
AW: VBA: nächste Zeile
23.08.2004 16:01:09
Marsi
Also bei mir bringt Dein Script nen Fehler und zwar an der
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
stelle....
ich muss zugeben. ich habe keinen blaßen was Du da geschrieben hast. Das ist mir nicht nur eine Nummer zu hoch. Wo kann ich das lernen? Gibt's da ein Buch was empfehlenswert wäre?
Danke nochmal für die Hilfe
Anzeige
AW: VBA: nächste Zeile
23.08.2004 16:11:58
Marcl
Falls sich unten stehenden Frage wegen der Punkte im Datumsformat darauf bezogen, in der Userform nur 6 Zahlen ein zu geben und dann macht Excel daraus Datum mit Punkten, dann nimm diesen Code:

Private Sub CommandButton1_Click()
Datum = TextBox1.Value
Columns("A:A").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell = Datum
ActiveCell.Offset(0, 3).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-3],1,2)"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-4],3,2)"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-5],5,2)"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-3],""."",RC[-2],""."",RC[-1])"
Selection.Copy
ActiveCell.Offset(0, -6).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(0, 3).ClearContents
ActiveCell.Offset(0, 4).ClearContents
ActiveCell.Offset(0, 5).ClearContents
ActiveCell.Offset(0, 6).ClearContents
Vorname = TextBox2.Text
Columns("B:B").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell = Vorname
Nachname = TextBox3.Text
Columns("C:C").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell = Nachname
Range("a1").Select
End Sub


Private Sub CommandButton2_Click()
Unload UserForm1
End Sub

Gruß
Marcl
Anzeige
AW: VBA: nächste Zeile
23.08.2004 17:16:45
Marsi
also bei mir kommt immer der laufzeitfehler 91
Objektvariable oder WITH_blockvariable nicht festgelegt.....
was auch immer das heißen mag :o)
AW: VBA: nächste Zeile
23.08.2004 19:53:57
Marcl
Was für ne Version hast denn Du? Bei mir auf XP läuft der Kram super.
AW: VBA: nächste Zeile
23.08.2004 19:57:17
Marcl
hier Deine Datei zurück. Wenn´s jetzt nicht läuft, habe ich auch keine Ahnung mehr. Bei mir (XP) klappt das super.
Gruß
Marcl
https://www.herber.de/bbs/user/9990.xls
Anzeige
AW: VBA: nächste Zeile
23.08.2004 20:23:59
Marsi
bei deiner version macht er's!
He, tausend Dank Marcl!!!!!!!!!!
AW: VBA: nächste Zeile
24.08.2004 06:19:34
Marcl
Ich hab die Spalten D-G benötigt, um das Datum zu basteln. Die müssen ausgeblendet werden.
Gruß
Marcl
AW: VBA: nächste Zeile
24.08.2004 07:56:29
Marsi
Kann es sein, dass die ganze Programmierung Versionsabhängig ist??
Unter XP läuft es super. Nun wollte ich das ganze auf ner Excel 2000 Version zum laufen bringen auf Windows 2000 Rechner und er bringt mir nen Laufzeitfehler 448, benanntes Argument nicht gefunden.In dieser Zeile:
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
also ich habe mir die ganze lange angeschaut und festgestellt, dass ich nichts kapiere was da drin steht.
Mit den Spalten, die ich freihalten muss, dass ist gar kein Problem, dass kann ich mir ja noch selbst anpassen wo ich die hinhaben will.
Anzeige
AW: VBA: nächste Zeile
24.08.2004 09:26:51
Marcl
aha, das kann sein,
und wenn Du nur
Selection.Find(What:="", After:=ActiveCell).Activate
schreibst? Habe ich aber nich tgetestet !
Gruß
Marcl
AW: VBA: nächste Zeile
24.08.2004 16:16:22
Marsi
Krass Du hast es drauf, jetzt klappts!
Danke viel Mal!
Marsi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Automatisches Schreiben in die nächste Zeile mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel, indem Du ALT + F11 drückst.

  2. Füge ein neues Modul hinzu: Rechtsklicke im Projektfenster auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Kopiere und füge den folgenden Code ein:

    Private Sub CommandButton1_Click()
       Dim Vorname As String
       Dim Nachname As String
       Dim Datum As String
    
       Datum = TextBox1.Value
       Columns("A:A").Select
       Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
           xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
           False, SearchFormat:=False).Activate
       ActiveCell = Datum
    
       Vorname = TextBox2.Text
       Columns("B:B").Select
       Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
           xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
           False, SearchFormat:=False).Activate
       ActiveCell = Vorname
    
       Nachname = TextBox3.Text
       Columns("C:C").Select
       Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
           xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
           False, SearchFormat:=False).Activate
       ActiveCell = Nachname
       Range("A1").Select
    End Sub
  4. Erstelle die UserForm: Füge TextBoxen für Vorname, Nachname und Datum sowie einen CommandButton hinzu.

  5. Testen: Starte die UserForm und gib die Daten in die TextBoxen ein. Klicke auf den Button, um die Daten in die nächste Zeile zu schreiben.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 91: Dieser Fehler tritt oft auf, wenn eine Objektvariable nicht korrekt gesetzt ist. Überprüfe, ob alle Objekte, wie TextBoxen und der Arbeitsbereich, korrekt referenziert werden.
  • Fehler: Laufzeitfehler 448: Dieser Fehler deutet darauf hin, dass ein benanntes Argument nicht gefunden wird. Achte darauf, dass alle Argumente im Selection.Find-Befehl korrekt geschrieben sind.
  • Fehler: Zelle bleibt leer: Vergewissere dich, dass die TextBoxen tatsächlich Werte enthalten, bevor Du versuchst, sie in die Zellen zu schreiben.

Alternative Methoden

  1. InputBox verwenden: Du kannst anstelle von TextBoxen auch InputBoxen verwenden, um die Benutzereingaben abzufragen.

    Private Sub CommandButton1_Click()
       Dim Vorname As String
       Dim Nachname As String
       Dim Datum As String
    
       Datum = InputBox("Gib das Datum ein:")
       ' Rest des Codes wie oben
    End Sub
  2. Excel in die nächste Zeile springen: Anstelle von Selection.Find, kannst Du auch die letzte gefüllte Zeile suchen und dann die nächste Zeile nutzen:

    Dim Zeile As Long
    Zeile = Cells(Rows.Count, "A").End(xlUp).Row + 1
    Cells(Zeile, 1).Value = Datum

Praktische Beispiele

  • Beispiel 1: Wenn Du Daten in die nächste Zeile schreiben möchtest, kannst Du die folgende Logik verwenden, um sicherzustellen, dass die Zelle nur dann beschriftet wird, wenn sie leer ist:

    If IsEmpty(Cells(Zeile, 1)) Then
       Cells(Zeile, 1).Value = Datum
    End If
  • Beispiel 2: Du kannst auch sicherstellen, dass der Vorname nur dann in Spalte B geschrieben wird, wenn diese Zelle leer ist:

    If IsEmpty(Cells(Zeile, 2)) Then
       Cells(Zeile, 2).Value = Vorname
    End If

Tipps für Profis

  • Nutze Option Explicit am Anfang Deines Codes, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.
  • Verwende Kommentarfunktionen, um Deinen Code verständlicher zu machen und die Logik hinter jedem Schritt zu erklären.
  • Optimiere den Code, indem Du wiederholte Anweisungen in Funktionen auslagerst.

FAQ: Häufige Fragen

1. Kann ich den VBA-Code anpassen, um mehr als drei TextBoxen zu verwenden? Ja, Du kannst beliebig viele TextBoxen hinzufügen und den Code entsprechend anpassen, um die Inhalte in die gewünschten Zellen zu schreiben.

2. Welche Excel-Version benötige ich für diesen Code? Der bereitgestellte VBA-Code funktioniert in Excel 2000 und neueren Versionen, jedoch können einige Funktionen in älteren Versionen eingeschränkt sein. Stelle sicher, dass Du die richtige Version verwendest.

3. Wie kann ich die Fehlerbehandlung in meinem VBA-Code hinzufügen? Du kannst On Error Resume Next oder On Error GoTo verwenden, um Fehler zu behandeln. Dies gibt Dir die Möglichkeit, auf Fehler zu reagieren, ohne dass das Programm abstürzt.

4. Was ist der Unterschied zwischen Selection.Find und Cells? Selection.Find sucht nach einem bestimmten Wert in der Auswahl, während Cells direkt auf die Zelle zugreift, die Du angibst (z.B. Cells(1, 1) für A1).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige