Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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

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
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
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
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

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige