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

Forumthread: Zeile in mehrere Tabellenblätter

Zeile in mehrere Tabellenblätter
Josef
Guten Morgen allerseits,
bräuchte mal wieder eure Hilfe.
Ich habe eine Datei mit mehreren Tabellenblättern. Das erste Blatt ich eine Übersicht über Werte, die in den unterschiedlichen Tabellenblättern errechnet werden. In dieser Übersicht habe ich bereits die Möglichkeit gegeben, Zeilen hinzu zu fügen und auch zu löschen. Beim hinzu fügen von Zeilen wird die letzte mit Formeln belegte Zeile kopiert und an gewünschter Stelle rein kopiert.
Die Zeilenanzahl soll sich in allen Tabellenblättern an den Zeilen in der Übersicht richten. Wenn ich jetzt eine Zeile in der Übersicht hinzu füge (z.B. Zeile 5) soll genau an dieser Position in den jeweiligen Tabellenblatt ebenfalls die letzte Zeile des jeweiligen Tabellenblattes (geschützte Zeile mit entsprechenden Formeln) kopiert und in Zeile 5 eingefügt werden.
Beim Löschen einer Zeile in der Übersicht soll das genau so funktionieren.
Vielen Dank schon mal im Voraus.
Gruß
Josef
Anzeige
AW: Zeile in mehrere Tabellenblätter
09.08.2010 11:20:12
Tino
Hallo,
arbeite die Tabellen in einer Schleife ab.
z. Bsp.
Sub Beispiel()
Dim ArrTab
Dim i As Integer

ArrTab = Array("Übersicht", "Tabelle2", "Tabelle3")

For i = Lbound(ArrTab) To Ubound(ArrTab)
    With Sheets(ArrTab(i))
        'Kennwort angeben, siehe auch in der Hilfe 
        .Protect "kennwort", UserinterFaceOnly:=True
        
        'Dein Code zum kopieren (Beispiel) 
        'vor jedes Range- Objekt einen Punkt davorsetzen, damit sich der Bereich auf die 
        'mit With festgelegt Tabelle bezieht 
        .Rows("5:5").Cut Destination:=.Rows("7:7")
    End With
Next i

End Sub
Gruß Tino
Anzeige
AW: Zeile in mehrere Tabellenblätter
09.08.2010 11:46:29
Josef
Hallo Tino,
danke für den Code, werd ihn gleich mal ausprobieren.
Gruß
Josef
AW: Zeile in mehrere Tabellenblätter
10.08.2010 14:55:06
Josef
Hallo Tino,
bin leider mit deinem Code nicht zurecht gekommen.
anbei habe ich meinen Code (auch vom Forum "geliehen") angefügt. Meine Veränderung habe ich fett markiert.
Sub Einfuegen_Zeile()
'Fügt eine Zeile ein
Dim Zeile As Long, wks As Worksheet
Zeile = ActiveCell.Row
Set wks = ActiveSheet
With wks
'Zeilen prüfen (nicht oberhalb der 1. Zeile eine Zeile einfügen - wegen Summenformel)
If Zeile > .Range("Startzeile_Gesamtübersicht").Row And _
Zeile Worksheets("Zimmertür").Range("Endzeile_Zimmertür").EntireRow.Copy
.Range(Zeile).Insert shift:=xlDown
Application.CutCopyMode = False
Cells(.Row - 1, 2).Select
End With
End If
Else
MsgBox "Nur vor Zeilen " & .Range("Startzeile_Gesamtübersicht").Row + 1 & " bis " _
& .Range("Endzeile_Gesamtübersicht").Row & " darf eine Position eingefügt werden!", _
vbInformation + vbOKOnly, _
"Positionszeile - Einfügen"
End If
End With
End Sub
ich bekomme aber leider folgende Fehlermeldung:
Laufzeitfehler '1004':
"Anwendungs- oder objektdefinierter Fehler"
Sorry, dass ich dich noch mal belästigen muß. Komme mit meinen beschränkten Kenntnissen/Fähigkeiten in VBA einach nicht weiter
Vielen Dank noch mal im Voraus für die Hilfe
Gruß
Josef
Anzeige
AW: Zeile in mehrere Tabellenblätter
11.08.2010 09:08:01
Tino
Hallo,
auch wenn ich Deinen Code noch nicht verstanden habe, weil ich die Tabelle nicht nach gebaut habe.
Ich denke nur ein Fehler ist diese Zeile.
.Range(Zeile).Insert shift:=xlDown
Mach mal diese daraus
.EntireRow.Insert shift:=xlDown
Gruß Tino
AW: Zeile in mehrere Tabellenblätter
11.08.2010 09:18:35
Josef
Hallo Tino,
Dein Tipp hat leider nicht zum gewünschte Ergebnis geführt.
die gewünschte Zeile in "Zimmertür" wird zwar kopiert, aber dann in "Gesamtübersicht" anstelle "Zimmertür" eingefügt. Einfügeposition würde passen.
Ausserdem wird die kopierte Zeile nur mit Werten und Formaten eingefügt aber nicht mit den enthaltenen Formeln.
Gruß
Josef
Anzeige
dann lade mal ein Bsp. hoch oT.
11.08.2010 09:37:31
Tino
ok. teste mal
11.08.2010 10:21:47
Tino
Hallo,
funktioniert es mit diesem Code
Sub Einfuegen_Zeile()
Dim Zeile As Long, wks As Worksheet
Dim IndexTab As Integer, lngZeile As Long

lngZeile = ActiveCell.Row

    'Zeilen prüfen (nicht oberhalb der 1. Zeile eine Zeile einfügen - wegen Summenformel) 
    If lngZeile > Range("Startzeile_Gesamtübersicht").Row And _
       lngZeile <= Range("Endzeile_Gesamtübersicht").Row Then
        If MsgBox("Vor Zeile " & lngZeile & " eine Zeile einfügen?", vbQuestion + vbYesNo, _
               "Zeile - Einfügen") = vbYes Then
          
            Rows(lngZeile).EntireRow.Copy
            Rows(lngZeile).EntireRow.Insert Shift:=xlDown
            
            IndexTab = ActiveSheet.Index
            IndexTab = IIf(IndexTab = 1, 2, 1)
            With Sheets(IndexTab)
                .Rows(lngZeile).EntireRow.Copy
                .Rows(lngZeile).Insert Shift:=xlDown
            End With
            
            Application.CutCopyMode = False
        End If
   Else
      MsgBox "Nur vor Zeilen " & Range("Startzeile_Gesamtübersicht").Row + 1 & " bis " _
          & Range("Endzeile_Gesamtübersicht").Row & " darf eine Position eingefügt werden!", _
          vbInformation + vbOKOnly, "Positionszeile - Einfügen"
    End If

End Sub


Sub Loeschen_Zeile()
Dim IndexTab As Integer, lngZeile As Long

lngZeile = ActiveCell.Row

    'Zeilen prüfen (letzte und erste Zeile darf nicht gelöscht werden) 
    If lngZeile > Range("Startzeile_Gesamtübersicht").Row And _
       lngZeile < Range("Endzeile_Gesamtübersicht").Row Then
        
        If MsgBox("Zeile " & lngZeile & " löschen?", vbQuestion + vbYesNo, "Positionszeile - Löschen") = vbYes Then
            
            Rows(lngZeile).Delete Shift:=xlShiftUp
        
            IndexTab = ActiveSheet.Index
            IndexTab = IIf(IndexTab = 1, 2, 1)
            Sheets(IndexTab).Rows(lngZeile).Delete Shift:=xlShiftUp
      
        End If
    
    Else
      MsgBox "Nur Zeilen von Nummer " & Range("Startzeile_Gesamtübersicht").Row + 1 & " bis " _
          & Range("Endzeile_Gesamtübersicht").Row - 1 & " dürfen gelöscht werden!", _
          vbInformation + vbOKOnly, "Positionszeile - Löschen"
    End If

End Sub
Gruß Tino
Anzeige
AW: Test positiv!!!
11.08.2010 14:57:03
Josef
Sorry, dass ich mich erst jetzt wieder melde.
Funktioniert!!!!
Jetzt hab ich nur noch ein paar Kleinigkeiten:
- Wo muß ich was ändern, damit ich diesen Effekt auch noch in meinen restlichen Tabellenblättern bekomme? (Zeile einfügen/löschen) - Hab leider in der Hilfe nichts passendes gefunden.
- Wie muß ich den Code verändern, damit je Tabellenblatt jeweils nur die letzte Zeile kopiert wird und an der markierten Zeile (lngZeile) eingefügt wird? (für die Gesamtübersicht hab ichs schon hinbekommen.)
Vielen Dank noch mal für deine Hilfe.
Gruß
Josef
Anzeige
versuch es mal so, ...
12.08.2010 08:54:52
Tino
Hallo,
in ArrayTab die Tabellen entsprechend angeben wo die Zeile eingefügt oder gelöscht werden soll.
Sub Einfuegen_Zeile()
Dim Zeile As Long, wks As Worksheet
Dim IndexTab As Integer, lngZeile As Long
Dim ArrayTab

'hier die die Tabellen entsprechend angeben 
ArrayTab = Array("Gesamtübersicht", "Zimmertür")

lngZeile = ActiveCell.Row

    'Zeilen prüfen (nicht oberhalb der 1. Zeile eine Zeile einfügen - wegen Summenformel) 
    If lngZeile > Range("Startzeile_Gesamtübersicht").Row And _
       lngZeile <= Range("Endzeile_Gesamtübersicht").Row Then
        If MsgBox("Vor Zeile " & lngZeile & " eine Zeile einfügen?", vbQuestion + vbYesNo, _
               "Zeile - Einfügen") = vbYes Then
          
            For IndexTab = Lbound(ArrayTab) To Ubound(ArrayTab)
                With Sheets(ArrayTab(IndexTab))
                    .Rows(lngZeile).EntireRow.Copy
                    .Rows(lngZeile).EntireRow.Insert Shift:=xlDown
                End With
            Next IndexTab
            
            Application.CutCopyMode = False
        End If
   Else
      MsgBox "Nur vor Zeilen " & Range("Startzeile_Gesamtübersicht").Row + 1 & " bis " _
          & Range("Endzeile_Gesamtübersicht").Row & " darf eine Position eingefügt werden!", _
          vbInformation + vbOKOnly, "Positionszeile - Einfügen"
    End If

End Sub


Sub Loeschen_Zeile()
Dim IndexTab As Integer, lngZeile As Long

'hier die die Tabellen entsprechend angeben 
ArrayTab = Array("Gesamtübersicht", "Zimmertür")

lngZeile = ActiveCell.Row

    If lngZeile > Range("Startzeile_Gesamtübersicht").Row And _
       lngZeile < Range("Endzeile_Gesamtübersicht").Row Then
        
        If MsgBox("Zeile " & lngZeile & " löschen?", vbQuestion + vbYesNo, _
                  "Positionszeile - Löschen") = vbYes Then
            
            For IndexTab = Lbound(ArrayTab) To Ubound(ArrayTab)
                With Sheets(ArrayTab(IndexTab))
                    .Rows(lngZeile).Delete Shift:=xlShiftUp
                End With
            Next IndexTab
        
        End If
    
    Else
        MsgBox "Nur Zeilen von Nummer " & Range("Startzeile_Gesamtübersicht").Row + 1 & " bis " _
          & Range("Endzeile_Gesamtübersicht").Row - 1 & " dürfen gelöscht werden!", _
          vbInformation + vbOKOnly, "Positionszeile - Löschen"
    End If

End Sub
Gruß Tino
Anzeige
AW: Funktionier auch aber...
12.08.2010 11:21:12
Josef
ich würde gerne je Tabellenblatt jeweils ausschließlich die letzte Zeile z.B. "Endzeile_Gesamtübersicht", "Endzeile_Zimmertür", usw. kopieren und an ausgewählter Position einfügen.
hab versucht anstelle
.Rows(lngZeile).EntireRow.Copy
strName = ActiveSheet.Name
Range("Endzeile_" & strName).EntireRow.Copy
einzusetzen, aber das funktioniert leider nicht wegen dem ActiveSheet. Da müßte der Code jedesmal abprüfen, in welchem Worksheet er sich befindet bzw. geht das irgenwie über Array?
Gruß
Josef
Anzeige
AW: Funktionier auch aber...
12.08.2010 11:33:48
Tino
Hallo,
mach es doch in der With Sheets(ArrayTab(IndexTab)) so.
With Sheets(ArrayTab(IndexTab))
.Rows(lngZeile).EntireRow.Copy
.Rows(lngZeile).EntireRow.Insert Shift:=xlDown
.Range("Endzeile_Gesamtübersicht").EntireRow.Copy
.Rows(lngZeile).PasteSpecial
'...
Nur verstehen kann ich dies nicht?
Dann könnte ja diese Zeile auf einmal mitten in der Tabelle sein?!
Gruß Tino
Anzeige
AW: Funktionier leider nicht
12.08.2010 13:41:55
Josef
Hallo Tino.
habs eingefügt, bekomme aber folgenden Fehler:
Laufzeitfehler '1004':
"Anwendungs- oder objektdefinierter Fehler"
sobald die "Endzeile_Zimmertüre" kopiert werden soll.
Nur verstehen kann ich dies nicht?
Dann könnte ja diese Zeile auf einmal mitten in der Tabelle sein?!
Das ist so korrekt und gewollt. in dieser Zeile sind ausschließlich Formeln enthalten. In den ersten Spalten (ca. A - F) sind Werte die in der "Gesamtübersicht" eingepflegt werden müssen und dann in den restlichen Tabellenblättern je nach Bedarf abgerufen werden.
Das Kopieren der letzten Zeile soll eine "blanco"-Zeile erzeugen (mit Berechnungsformeln) in der keine manuellen Werten ("Gesamtübersicht") enthalten sind um ein Übernehmen von "alt"-Werten zu vermeiden, da sonst evtl. falsche Werte für eine Berechnung heran gezogen werden.
Kannst du mir evtl. noch mal helfen, damit ich das (letzte Zeile je Tabellenblatt kopieren und einfügen) umsetzen kann.
Vielen Dank noch mal für deine Geduld und die tolle Unterstützung.
Gruß
Josef
Anzeige
AW: Problem gelöst
13.08.2010 09:04:29
Josef
Hallo Tino,
hab das Thema mit letzter Zeile je Tabellenblatt kopieren gecancelt.
ich lösch einfach alle manuellen Eingaben aus der kopierten Zeile, somit gleicher Effekt erreicht.
Hätte ich auch gleich drauf kommen können.
Vielen Dank noch mal an dich.
Ihr macht hier wirklich einen tollen Job!!!
Gruß
Josef
Anzeige
;

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
Anzeige

Infobox / Tutorial

Zeile in mehrere Tabellenblätter einfügen


Schritt-für-Schritt-Anleitung

Um in Excel eine Zeile in mehreren Tabellenblättern hinzuzufügen oder zu löschen, kannst du den folgenden VBA-Code verwenden. Der Code ermöglicht es, die letzte Zeile mit Formeln aus der Übersicht zu kopieren und an der gewünschten Stelle in den jeweiligen Tabellenblättern einzufügen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul ein:
    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)".
    • Wähle "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:
Sub Einfuegen_Zeile()
    Dim Zeile As Long, wks As Worksheet
    Dim IndexTab As Integer, lngZeile As Long
    Dim ArrayTab

    ArrayTab = Array("Gesamtübersicht", "Zimmertür") ' Hier die Tabellen angeben

    lngZeile = ActiveCell.Row

    If lngZeile > Range("Startzeile_Gesamtübersicht").Row And lngZeile <= Range("Endzeile_Gesamtübersicht").Row Then
        If MsgBox("Vor Zeile " & lngZeile & " eine Zeile einfügen?", vbQuestion + vbYesNo, "Zeile - Einfügen") = vbYes Then
            For IndexTab = LBound(ArrayTab) To UBound(ArrayTab)
                With Sheets(ArrayTab(IndexTab))
                    .Rows(lngZeile).EntireRow.Copy
                    .Rows(lngZeile).EntireRow.Insert Shift:=xlDown
                End With
            Next IndexTab
            Application.CutCopyMode = False
        End If
    Else
        MsgBox "Nur vor Zeilen " & Range("Startzeile_Gesamtübersicht").Row + 1 & " bis " & Range("Endzeile_Gesamtübersicht").Row & " darf eine Position eingefügt werden!", _
               vbInformation + vbOKOnly, "Positionszeile - Einfügen"
    End If
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Platziere den Cursor in der Zeile, vor der du eine neue Zeile einfügen möchtest.
  3. Drücke ALT + F8, wähle Einfuegen_Zeile und klicke auf "Ausführen".

Dieser Code fügt eine neue Zeile in den angegebenen Tabellenblättern ein, basierend auf der Zeile, die du in der Übersicht ausgewählt hast.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler '1004'

    • Lösung: Dies kann auftreten, wenn du versuchst, eine Zeile außerhalb des gültigen Bereichs zu kopieren oder einzufügen. Stelle sicher, dass die Zeilenangaben korrekt sind und dass du innerhalb der festgelegten Bereiche arbeitest.
  • Problem: Die kopierte Zeile enthält keine Formeln

    • Lösung: Achte darauf, dass du .Copy und .PasteSpecial verwendest, um die Formeln zu übertragen.

Alternative Methoden

Wenn du keine VBA-Makros verwenden möchtest, kannst du auch manuell Zeilen in mehreren Tabellenblättern hinzufügen. Dies ist jedoch zeitaufwändiger und nicht für große Datenmengen geeignet.

  1. Gehe zu dem ersten Tabellenblatt.
  2. Füge die Zeile manuell ein, indem du mit der rechten Maustaste auf die Zeilennummer klickst und "Zeile einfügen" wählst.
  3. Wiederhole den Vorgang für jedes Tabellenblatt.

Praktische Beispiele

Hier sind einige Anwendungsbeispiele für den VBA-Code:

  • Beispiel 1: Wenn du in der "Gesamtübersicht" eine neue Zeile einfügen möchtest, wird diese Zeile automatisch auch in "Zimmertür" eingefügt.
  • Beispiel 2: Wenn du eine Zeile in der Übersicht löschst, kannst du einen ähnlichen Code verwenden, um die Zeile in den anderen Tabellenblättern zu löschen.
Sub Loeschen_Zeile()
    Dim IndexTab As Integer, lngZeile As Long
    Dim ArrayTab

    ArrayTab = Array("Gesamtübersicht", "Zimmertür")
    lngZeile = ActiveCell.Row

    If lngZeile > Range("Startzeile_Gesamtübersicht").Row And lngZeile < Range("Endzeile_Gesamtübersicht").Row Then
        If MsgBox("Zeile " & lngZeile & " löschen?", vbQuestion + vbYesNo, "Positionszeile - Löschen") = vbYes Then
            For IndexTab = LBound(ArrayTab) To UBound(ArrayTab)
                With Sheets(ArrayTab(IndexTab))
                    .Rows(lngZeile).Delete Shift:=xlShiftUp
                End With
            Next IndexTab
        End If
    Else
        MsgBox "Nur Zeilen von Nummer " & Range("Startzeile_Gesamtübersicht").Row + 1 & " bis " & Range("Endzeile_Gesamtübersicht").Row - 1 & " dürfen gelöscht werden!", _
               vbInformation + vbOKOnly, "Positionszeile - Löschen"
    End If
End Sub

Tipps für Profis

  • Verwende Schutzfunktionen in deinen Tabellenblättern, um zu verhindern, dass Benutzer versehentlich Zeilen löschen oder ändern.
  • Achte darauf, dass deine Benennungen für die Tabellenblätter konsistent sind, um Fehler im Code zu vermeiden.
  • Überlege, ob du eine Fehlerbehandlung in deinen VBA-Code einbauen möchtest, um unerwartete Fehler abzufangen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ich nicht zu viele Zeilen in Excel fixiere? Du kannst die Anzahl der fixierten Zeilen in der Ansicht anpassen, indem du zu "Ansicht" > "Fenster fixieren" gehst und die entsprechenden Optionen auswählst.

2. Ist es möglich, mehrere Tabellenblätter in einem einzigen Makro zu bearbeiten? Ja, du kannst ein Array verwenden, um mehrere Tabellenblätter zu definieren und sie dann in einer Schleife zu bearbeiten, wie im 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