Anzeige
Archiv - Navigation
884to888
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
884to888
884to888
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro auf alle Blätter einer Datei anwenden

Makro auf alle Blätter einer Datei anwenden
05.07.2007 15:49:59
Melanie
Hallo,
ich hoffe, hier kann mir jemand helfen. Ich hab schon im Archiv gesucht, aber irgendwie funktioniert das alles nicht so richtig.
Ich habe ein recht langes Makro (findet aber alles in einem Tabellenblatt statt), was in einer Datei auf alle enthaltenen Tabellenblätter angewendet werden muss.
Das heißt, ich will eine Schleife haben die unabhängig von der Anzahl der Tabellenblätter den Code in jedem Tabellenblatt ausführt. Wie mache ich das?
Danke für eure Hilfe im Voraus!
Grüße, Melanie

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 15:55:11
Ludicla
Hallo Melanie,
das müsste doch klappen wenn Du im Projekt-Explorer
das Makro in "DieseArbeitsmappe" kopierst.
Gruss Ludicla.

AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 15:55:25
Oberschlumpf
Hi Melanie
das hier ist eine Möglichkeit

Dim liSh As Integer
For liSh = 1 To ActiveWorkbook.Sheets.Cont
'dein Code
'Zugriff auf jedes Sheet geht so:
ActiveWorkbook.Sheets(liSh).Range("deineZelle").Value = DeinWert
Next


Konnte ich helfen?
Ciao
Thorsten

AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:01:00
Melanie
Was meinst Du mit "deineZelle" und "DeinWert"?

AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:17:00
Oberschlumpf
DeineZelle = die Zelle/Zellen, die du mit Werten "füllen" willst (ich kenne deine Zellen nicht, da du sie uns nicht verraten hattest)
DeinWert = dein Wert/Werte, mit den die Zelle/Zellen gefüllt werden sollen - auch hier kenne ich die Werte nicht
Ändere mal die For-Zeile so um:
For liSh = 1 To ActiveWorkbook.Sheets.Count
(hatte das u nicht getippt)

Anzeige
AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 15:57:28
Hajo_Zi
Hallo Melanie,
da Du Dein Makr nicht gepostest hast gehe ich mal davon aus Du bekommst es selber angepast.

Option Explicit
Dim WsTabelle As Worksheet
Private Sub Aufheben()
For Each WsTabelle In Sheets
Next WsTabelle
End Sub



AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:05:00
Melanie
Hallo Hajo,
das ist mein Code: (hatte ihn nicht eingefügt, weil er so lang ist :o)

Sub Sollstunden_fuer_MIK_Budget()
'Formeln durch Werte ersetzen
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Fixierung aufheben
ActiveWindow.FreezePanes = False
'Spalten einfügen und benennen
Columns("A:D").Select
Selection.Insert Shift:=xlToRight
Range("A1").Select
ActiveCell.FormulaR1C1 = "Periode"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Jahr"
Range("C1").Select
ActiveCell.FormulaR1C1 = "KTR"
Range("D1").Select
ActiveCell.FormulaR1C1 = "KOA"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Aufwand"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Kosten"
'KTR ermitteln
Range("C2").Select
ActiveCell.FormulaR1C1 = "=MID(R[-1]C[4],10,4)"
'Formeln durch Werte ersetzen
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Basis löschen
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
'Zwischen und Ist löschen
Range("G4").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, -1).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
'Summenzeile löschen
Range("H5").Select
Selection.End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.EntireRow.Delete
Kopierbereich = Range("H5").End(xlDown).Row
'Januar kopieren
'Monatswert einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "1"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
'Monatswert kopieren
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
'Wert in Spalte A einfügen
Range("A2").Select
ActiveSheet.Paste
'Werte kopieren
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D2").Select
ActiveSheet.Paste
Columns("I:J").Delete
'Februar kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "2"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'Maerz kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "3"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'April kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "4"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'Mai kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "5"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'Juni kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "6"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'Juli kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "7"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'August kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "8"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'September kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "9"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'Oktober kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "10"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'November kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "11"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'Dezember kopieren
'Monat einfügen
Range("G5").Select
ActiveCell.FormulaR1C1 = "12"
Selection.AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
Range("G5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'Werte einfügen
Range("H5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("D1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Columns("I:J").Delete
'Restliche Spalten löschen
Columns("G:G").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Delete
'Jahr und KTR in alle Zeilen kopieren
AlleZeilen = Range("A2").End(xlDown).Row
Range("B2").Select
ActiveCell.FormulaR1C1 = "2007"
Range("B2:C2").Select
Selection.Copy
Range("B3:C" & AlleZeilen).PasteSpecial
'Leere Zeilen löschen
Range("F1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=6, Criteria1:="="
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
'Filter Deaktivieren
Selection.AutoFilter
End Sub


Und jetzt soll er das für alle Blätter machen. Funzt aber nid.
Kann das an der Variablendeklaration hängen? Ich weiß nicht genau wie ich den "Kopierbereich" und "AlleZeilen" deklarieren muss.
Danke im Voraus!!

Anzeige
AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:21:00
Hajo_Zi
Hallo Melanie,
ich habe mir da makro jetzt mal angesehen. In Deinem Code wird 12 mal dieser Codeteil in der geichen Tabelle gemacht.

'   Januar kopieren
'Monatswert einfügen
Range("G5") = 1
Range("G5").AutoFill Destination:=Range("G5:G" & Kopierbereich), Type:=xlFillDefault
'   Monatswert kopieren
Range(Range("G5"), Range("G5").End(xlDown)).Copy Range("A2")
'   Werte kopieren
Range("H5:J5").Select
Range(Range("H5:J5"), Range("H5:J5").End(xlDown)).Copy Range("D2")
Columns("I:J").Delete


Warum 12x
Vor diesem Code wird noch folgender Code ausgeführt in der gleichen Tabelle.


Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues
'   Fixierung aufheben
ActiveWindow.FreezePanes = False
'   Spalten einfügen und benennen
Columns("A:D").Insert Shift:=xlToRight
Range("A1") = "Periode"
Range("B1") = "Jahr"
Range("C1") = "KTR"
Range("D1") = "KOA"
Range("E1") = "Aufwand"
Range("F1") = "Kosten"
'   KTR ermitteln
Range("C2").FormulaR1C1 = "=MID(R[-1]C[4],10,4)"
'   Formeln durch Werte ersetzen
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues
'   Basis löschen
Range(Range("G5"), Range("G5").End(xlDown)).EntireRow.Delete
'   Zwischen und Ist löschen
Range(Range("G4").End(xlDown).Offset(0, -1), Range("G4").End(xlDown).Offset(0, -1).End( _
xlDown)).EntireRow.Delete
'   Summenzeile löschen
Range(Range("H5").End(xlDown), Range("H5").End(xlDown).End(xlToRight)).EntireRow.Delete
Kopierbereich = Range("H5").End(xlDown).Row


Der Code ist mir völlig unklar. Den Abspann habe ich mir noch nicht angesehen.
Gruß Hajo

Anzeige
AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:26:00
Melanie
Das ganze wird zwölf mal gemacht, weil ich eine Matrix in Tabellenform konvertieren muss. Ich lad Dir das mal hoch...
https://www.herber.de/bbs/user/43868.xls
Im Blatt Ausgang siehst Du was ich bekomme und das Blatt Ergebnis wird erzeugt. In meiner Datei sind aber unheimlich viele Blätter, das Makro soll auf alle angewendet werden.

AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:30:00
Hajo_Zi
Hallo Melanie,
ich habe jetzt Dein Makro mal laufen lassen. Ich habe jetzt aber nicht Dein Problem gesehen, das was in meheren Tabellen ausgeführt werden soll.
Gruß Hajo

Anzeige
AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:34:00
Melanie
Hi Hajo,
das war nur ein Beispiel, damit klar wird, was der Code tut. Anbei noch mal eine Datei mit mehreren Blättern...
https://www.herber.de/bbs/user/43869.xls

AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:52:00
Melanie
Hi Hajo,
ich muss jetzt leider (?) in Feierabend. Wenn Du noch was reißen kannst wär super. Ich check das dann morgen früh wieder.
Danke vielmals!!!

AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 16:59:00
Hajo_Zi
Hallo Melanie,
Ich habe jetzt gerade Dein Ausgangsmakro überarbeitet, das es ohne select läuft, jtzt wäre eigentlich Dein Einsatz gefragt um zu prüfen das es richtig ist. Dann hast Du morgen vielleicht Probleme falls in diesem Teil schon ein Fehler ist.
Gruß Hajo

Anzeige
AW: Makro auf alle Blätter einer Datei anwenden
05.07.2007 17:12:00
Hajo_Zi
Hallo Melanie,
ich hoffe mal es läuft alles korrekt.

Option Explicit
Sub Sollstunden_Hajo_Zi2()
Dim Kopierbereich  As Long
Dim AlleZeilen As Long
Dim InI As Integer
Dim WsTabelle As Worksheet
Application.ScreenUpdating = False
For Each WsTabelle In Sheets
With WsTabelle
'           Beginn
'           Formeln durch Werte ersetzen
.Cells.Copy
.Cells.PasteSpecial Paste:=xlPasteValues
'           Fixierung aufheben Warum?
'            ActiveWindow.FreezePanes = False
'           Spalten einfügen und benennen
.Columns("A:D").Insert Shift:=xlToRight
.Range("A1") = "Periode"
.Range("B1") = "Jahr"
.Range("C1") = "KTR"
.Range("D1") = "KOA"
.Range("E1") = "Aufwand"
.Range("F1") = "Kosten"
'           KTR ermitteln
.Range("C2").FormulaR1C1 = "=MID(R[-1]C[4],10,4)"
'           Formeln durch Werte ersetzen
.Range("C2").Copy
.Range("C2").PasteSpecial Paste:=xlPasteValues
'           Basis löschen
.Range(.Range("G5"), .Range("G5").End(xlDown)).EntireRow.Delete
'           Zwischen und Ist löschen
.Range(.Range("G4").End(xlDown).Offset(0, -1), .Range("G4").End(xlDown).Offset(0, - _
1).End(xlDown)).EntireRow.Delete
'           Summenzeile löschen
.Range(.Range("H5").End(xlDown), .Range("H5").End(xlDown).End(xlToRight)).EntireRow. _
Delete
Kopierbereich = .Range("H5").End(xlDown).Row
'           Januar kopieren
'           Monatswert einfügen
.Range("G5") = 1
.Range("G5").AutoFill Destination:=.Range("G5:G" & Kopierbereich), Type:= _
xlFillDefault
'           Monatswert kopieren
.Range(.Range("G5"), .Range("G5").End(xlDown)).Copy .Range("A2")
'           Werte kopieren
.Range(.Range("H5:J5"), .Range("H5:J5").End(xlDown)).Copy .Range("D2")
.Columns("I:J").Delete
'           restliche Monate kopieren, Monat einfügen
For InI = 2 To 12
.Range("G5") = InI
.Range("G5").AutoFill Destination:=.Range("G5:G" & Kopierbereich), Type:= _
xlFillDefault
.Range(.Range("G5"), .Range("G5").End(xlDown)).Copy .Range("A1").End(xlDown). _
Offset(1, 0)
'               Werte einfügen
.Range(.Range("H5:J5"), .Range("H5:J5").End(xlDown)).Copy .Range("D1").End( _
xlDown).Offset(1, 0)
.Columns("I:J").Delete
Next InI
'           Restliche Spalten löschen
.Range(.Columns("G:G"), .Columns("G:G").End(xlToRight)).Delete
'           Jahr und KTR in alle Zeilen kopieren
AlleZeilen = .Range("A2").End(xlDown).Row
.Range("B2") = 2007
.Range("B2:C2").Copy
.Range("B3:C" & AlleZeilen).PasteSpecial
'           Leere Zeilen löschen
.Range("F1").AutoFilter
.Range("F1").AutoFilter Field:=6, Criteria1:="="
.Range(.Rows("2:2"), .Rows("2:2").End(xlDown)).Delete Shift:=xlUp
'           Filter Deaktivieren
.Rows("2:2").AutoFilter
End With
Next WsTabelle
Application.ScreenUpdating = True
End Sub


Gruß Hajo

Anzeige
AW: Makro auf alle Blätter einer Datei anwenden
06.07.2007 13:35:00
Hajo_Zi
Hallo Melanie,
keine Rückmeldung ist auch eine Meldung. Das Forum ist eine Aktion und eine Reaktion.
Du kannst Dir sicher sein meine Reaktion auf Deine nächste umfangreiche Aufgabe, da werde ich mich an Deinen Stil anpassen.
Gruß Hajo

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige