Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 11:16:26
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Neue Zeile ganz oben einfügen VBA

Neue Zeile ganz oben einfügen VBA
16.12.2020 13:00:21
David
Guten Tag,
da mir hier bereits schon geholfen wurde, hätte ich noch ein anliegen.
Mit dem unten stehenden Code, wird immer die nächst freie Zelle einen
Eintrag eingefügt.
Ich möchte aber das er immer in Zeile 2 eine neue Zeile einfügt und dort die Werte einträgt,
so das im Prinzip immer die neuesten Werte ganz oben stehen (Zeile 1 ist die Überschrift).
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim ErsteFreieZeile As Long If Target.Count = 1 Then If Not Intersect(Target, Sh.Range("A1:AS47")) Is Nothing Then Application.EnableEvents = False With Worksheets("Protokoll") ErsteFreieZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 .Unprotect Password:="xxx" .Cells(ErsteFreieZeile, 1) = Sh.Name .Cells(ErsteFreieZeile, 2) = Target.Address(0, 0) .Cells(ErsteFreieZeile, 3) = Target.Value .Cells(ErsteFreieZeile, 4) = Date .Cells(ErsteFreieZeile, 5) = Time .Cells(ErsteFreieZeile, 6) = Environ("username") .Protect Password:="xxx" End With Application.EnableEvents = True End If End If End Sub
Vielen Dank.
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Neue Zeile ganz oben einfügen VBA
16.12.2020 13:02:32
David
Hier der Quellcode nochmal ordentlich
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count = 1 Then
If Not Intersect(Target, Sh.Range("A1:AS47")) Is Nothing Then
Application.EnableEvents = False
With Worksheets("Protokoll")
ErsteFreieZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Unprotect Password:="Urlaub"
.Cells(ErsteFreieZeile, 1) = Sh.Name
.Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 3) = Target.Value
.Cells(ErsteFreieZeile, 4) = Date
.Cells(ErsteFreieZeile, 5) = Time
.Cells(ErsteFreieZeile, 6) = Environ("username")
.Protect Password:="Urlaub"
End With
Application.EnableEvents = True
End If
End If
End Sub

Anzeige
AW: Neue Zeile ganz oben einfügen VBA
16.12.2020 13:11:10
Yal
Hallo David,
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
Dim i
If Target.Count = 1 Then
If Not Intersect(Target, Sh.Range("A1:AS47")) Is Nothing Then
Application.EnableEvents = False
With Worksheets("Protokoll")
.Unprotect Password:="Urlaub"
For i = 1 To 2
ErsteFreieZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Sh.Name
.Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 3) = Target.Value
.Cells(ErsteFreieZeile, 4) = Date
.Cells(ErsteFreieZeile, 5) = Time
.Cells(ErsteFreieZeile, 6) = Environ("username")
Next
.Protect Password:="Urlaub"
End With
End If
End If
Application.EnableEvents = True
End Sub
VG
Yal
Anzeige
AW: Neue Zeile ganz oben einfügen VBA
16.12.2020 13:39:36
David
Hallo Yal,
vielen Dank für die schnelle Antwort.
Funktioniert leider nicht, jetzt schreibt Excel immer zwei Zeilen ganz unten.
Muss man Excel nicht erklären, zuerst Zeile 2 als neue Zeile einfügen dann den normalen Prozess weiter?
AW: Neue Zeile ganz oben einfügen VBA
16.12.2020 13:52:25
Yal
Ach so. Falsch verstanden.
In deinem originalen Coding:
ErsteFreieZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 2
verwenden: plus zwei am Ende anstatt plus eins.
Versuche immer den Coding zu lesen und verstehen. Die Anstrengung wird schnell belohnt!
VG
Yal
Anzeige
AW: Neue Zeile ganz oben einfügen VBA
16.12.2020 14:02:17
Rolf
Hallo David
diese Zeile: ErsteFreieZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
ersetzen durch: .Rows("2:2").Insert Shift:=xlDown
ErsteFreieZeile = 2
oder statt der Variablen in allen betreffenden Zeilen gleich .cells(2,1) usw. schreiben.
Gruß Rolf
AW: Neue Zeile ganz oben einfügen VBA
17.12.2020 11:46:57
David
Das hat soweit funktioniert, jetzt wollte ich aber das beim einfügen der zweiten Zeile nicht das Format von der Überschrift kopiert sondern einfach immer das Format aus der unteren Zeile übernimmt.
Laut Excel bin ich auf diese Formel gestoßen und habe ich auch eingepflegt.
.Rows("2:2").Insert CopyOrigin:=xlFormatFromRightOrBelow
ErsteFreieZeile = 2
Das komische ist, beim ersten mal klappt es, beim zweiten mal zeigt er mir ein Fehler an.
Hier scheint wohl ein Denkfehler zu sein?
Anzeige
AW: Neue Zeile ganz oben einfügen VBA
18.12.2020 12:24:17
Yal
Moin,
markiere eine Zelle und rufe abwechselnd eine von diese beiden Subs (Alt+F8)
Sub FormatVonOben_uebernehmen()
Selection.EntireRow.Insert CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
Sub FormatVonUnten_uebernehmen()
Selection.EntireRow.Insert CopyOrigin:=xlFormatFromRightOrBelow
End Sub
Schaue wie es sich auf der Formatierung auswirkt. Ich hatte es nicht gewusst und werde es schnell vergessen. Aber forschen und probieren, das kann ich gut.
Viel Erfolg
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Neue Zeile ganz oben einfügen mit VBA


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA eine neue Zeile oberhalb einer bestehenden Zeile einzufügen, kannst Du den folgenden Code verwenden. Dieser Code fügt immer eine neue Zeile in Zeile 2 ein und überträgt die Werte dort.

Verwende diesen VBA-Code in Deinem Excel-Projekt:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count = 1 Then
    If Not Intersect(Target, Sh.Range("A1:AS47")) Is Nothing Then
        Application.EnableEvents = False
        With Worksheets("Protokoll")
            .Rows("2:2").Insert Shift:=xlDown
            ErsteFreieZeile = 2
            .Cells(ErsteFreieZeile, 1) = Sh.Name
            .Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
            .Cells(ErsteFreieZeile, 3) = Target.Value
            .Cells(ErsteFreieZeile, 4) = Date
            .Cells(ErsteFreieZeile, 5) = Time
            .Cells(ErsteFreieZeile, 6) = Environ("username")
        End With
        Application.EnableEvents = True
    End If
End If
End Sub

Häufige Fehler und Lösungen

  • Problem: Excel fügt immer eine neue Zeile ganz unten ein.

    • Lösung: Stelle sicher, dass Du .Rows("2:2").Insert Shift:=xlDown verwendest, um die neue Zeile an der gewünschten Stelle einzufügen.
  • Problem: Fehler beim Formatieren der neuen Zeile.

    • Lösung: Wenn Du das Format der neuen Zeile ändern möchtest, verwende .Rows("2:2").Insert CopyOrigin:=xlFormatFromRightOrBelow, um das Format von der unteren Zeile zu übernehmen.

Alternative Methoden

Eine alternative Methode, um eine neue Zeile oberhalb einzufügen, wäre die Verwendung von Excel-Formeln oder Makros. Hier sind zwei Subroutinen, die Dir helfen können:

Sub FormatVonOben_uebernehmen()
    Selection.EntireRow.Insert CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

Sub FormatVonUnten_uebernehmen()
    Selection.EntireRow.Insert CopyOrigin:=xlFormatFromRightOrBelow
End Sub

Du kannst diese Subs abwechselnd aufrufen, um verschiedene Formatierungen zu testen.


Praktische Beispiele

Wenn Du eine neue Zeile in den ersten zwei Zeilen einfügen möchtest, kannst Du den folgenden Code verwenden:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    .Rows("2:2").Insert Shift:=xlDown
    ' Weitere Codezeilen hier...
    Application.EnableEvents = True
End Sub

Dieser Code stellt sicher, dass beim Einfügen der Zeile die bestehenden Daten nicht überschrieben werden.


Tipps für Profis

  • Nutze die Option Application.EnableEvents = False, um zu verhindern, dass das Makro während seiner Ausführung erneut ausgelöst wird.
  • Achte darauf, die richtigen Passwörter bei .Unprotect und .Protect zu verwenden, wenn Du mit geschützten Blättern arbeitest.
  • Probiere, die Codezeilen in einem Testdokument zu verwenden, bevor Du sie auf wichtige Daten anwendest.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die neuen Zeilen immer an der richtigen Stelle eingefügt werden?
Verwende .Rows("2:2").Insert Shift:=xlDown, um sicherzustellen, dass neue Zeilen immer oberhalb der zweiten Zeile eingefügt werden.

2. Was kann ich tun, wenn die Formatierung nicht wie gewünscht übernommen wird?
Vergewissere Dich, dass Du CopyOrigin:=xlFormatFromRightOrBelow korrekt verwendest, um das Format von der unteren Zeile zu übernehmen.

3. Gibt es eine Möglichkeit, das Einfügen der Zeilen zu automatisieren?
Ja, Du kannst ein Makro erstellen, das beim Ändern einer Zelle automatisch eine neue Zeile einfügt, wie im Schritt-für-Schritt-Beispiel gezeigt.

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