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

Makro über alle Tabellenblätter laufen lassen

Makro über alle Tabellenblätter laufen lassen
25.07.2008 14:49:00
Philipo
Hallo zusmmen,
ein Super Forum und Super Arbeit von Herber!
Das musste mal als erstes gesagt werden.
Ich habe das letze mal VBA-Makros vor ca. 6 Jahren geschrieben und brauche das jetzt wieder, da ich einige Daten von einer DB nach Excel exportiert habe und diese neun auswerten muss/soll.
Den Import und die Formatierungen habe ich über VBA realisiert um wieder in die ganze Geschichte rein zu kommen. Ich wollte mir das Leben nochmal dank eines VBA Makros erleichtern, jedoch bin ich kurz vor dem Ziel zum stocken gekommen.
Das Makro das ich jetzt geschrieben habe bildet im aktiven Tabellenblatt die relavanten Summen und Durchschnittswerte, jetzt soll dieses Makro aber auf ALLEN Tabellenblättern durchlaufen, wie bekomme ich das hin?
Gibt es keine Funktion die besagt, führe anschließenden Code für bzw. in allen Tabellenblättern aus und vor dem END SUB ein Stop oder so?!?!
Vielen Dank und viele Grüße

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro über alle Tabellenblätter laufen lassen
25.07.2008 15:01:00
Worti
Hallo Philipo,
so

Sub Schleife()
Dim ws as Worksheet
For each ws in Thisworkbook.Worksheets
'Deinen Code, hierbei Zelladressen komplett referenzieren zB. mit ws.Range("K7")
Next ws
End Sub


Gruß Worti

AW: Makro über alle Tabellenblätter laufen lassen
25.07.2008 15:16:19
Philipo
Hallo Worti,
das habe ich mir auch schong edacht aber er wiederholt sich dann so oft wie es tabellenblätter gibt und macht die Ausgaben in dem ersten Tabellenblatt in dem ich das Makro starte.
Das problem ist wohl, dass die Angaben nicht wie Du erwähnt hast komplett referenzierbar ist.
Denn die Zeilenmenge ist unterschiedlich von Tabellenblatt zu tabellenblatt und ich suche in meinem makro nach der letzten befüllten zeile und mache dann eine zeile frei und mache sozusagen eine neue titelzeile und bilde AVG, SUM etc.
wenn ich einzeln in die Tabellenblätter gehe und mein Makro über die Tastenkombi ausführe klappt alles wunderbar. Ich will jetzt eben nichgt in jedes Tabellenblatt einzlen gehen.
Vielleicht hilft dir mein code weiter ist bestimmt murks und lässt sich alles auch anderst realisieren aber ich habe es so hinbekommen und es läuft und gibt aus was ich mächte jetzt muss nur nocht die "automation" her :)

lastrow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
ActiveSheet.Cells(lastrow + 2, 2).Select
ActiveCell.FormulaR1C1 = "Totaldistance in Km"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "Totalconsumption in L"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "Standconsumption in L"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "Averagespeed in Km/h"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "Averageweight in T"
ActiveCell.Offset(0, -4).Select
With ActiveCell
Range(.Offset(0, 0), .Offset(0, 4)).Select
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Font.Bold = True
Columns("E:E").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Dim iRow As Integer, iRowL As Integer, iColL As Integer, iCounter As Integer, Zeilen As Integer
iColL = Cells(1, 256).End(xlToLeft).Column
iRowL = Cells(Rows.Count, 1).End(xlUp).Row
For iRow = 1 To iRowL
If Rows(iRow).Hidden = False Then
If WorksheetFunction.CountA(Rows(iRow)) > 0 Then
iCounter = iCounter + 1
End If
End If
Next iRow
Zeilen = iCounter - 1
Zeilen2 = iCounter - 3
Range("B65536").End(xlUp).Offset(1, 0).Formula = "=sum(B2:B" & Range("B65536").End(xlUp).Row & " _
)/1000"
Range("C65536").End(xlUp).Offset(1, 0).Formula = "=sum(C2:C" & Range("C65536").End(xlUp).Row & " _
)/1000"
Range("D65536").End(xlUp).Offset(1, 0).Formula = "=sum(D2:D" & Range("D65536").End(xlUp).Row & " _
)/1000"
Range("E65536").End(xlUp).Offset(1, 0).Formula = "=(sum(E2:E" & Range("E65536").End(xlUp).Row &  _
"))/" & Zeilen & "*3.6"
Range("F65536").End(xlUp).Offset(1, 0).Formula = "=sum(F2:F" & Range("F65536").End(xlUp).Row & " _
)/1000"
ActiveCell.Offset(1, -1).Select
ActiveCell.FormulaR1C1 = "SUM:"
Selection.Font.Bold = True
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "AVG:"
Selection.Font.Bold = True
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen
End Sub


Anzeige
AW: Makro über alle Tabellenblätter laufen lassen
25.07.2008 15:23:00
Worti
Hallo Philipo,
da hilft auf die schnelle das:

Sub Schleife()
Dim ws as Worksheet
For each ws in Thisworkbook.Worksheets
ws.Activate 'Dann ist das jeweilige Blatt das Active und alle Anweisungen werden ohne  _
weitere
'Referenzierung auf dem dann "richtigen" Blatt gemacht
Next ws
End Sub


Ist zwar nicht so toll mit dem activate, aber es müßte funzen
Gruß Worti

Klasse Antwort, schönes WE! :o) (kwT)
25.07.2008 15:30:46
Backowe

AW: Makro über alle Tabellenblätter laufen lassen
25.07.2008 15:34:04
Philipo
Hallo Worti,
wir stehen kurz vor dem Ziel :)
er führt es jetzt auf ALLEN TABELLENBLÄTTERN aus ABER!!!!!
Die Werte für AVG stimmen nicht mehr!!!!
Die Werte für die SUM sind korrekt und er macht auch die neuen Titel am Schluss wie gewünscht auf jedem Blatt jedoch stimmt die Berechnung von AVG nicht mehr
Ich bilde erst die Summen, dann mach gehe ich eine zeile tiefer und schreib AVG rein und gehe wieder meine Spalten durch und teile durch anzahl der Zeilen.........soweit zur Theorie :)

Range("B65536").End(xlUp).Offset(1, 0).Formula = "=sum(B2:B" & Range("B65536").End(xlUp).Row & " _
_
)/1000"
Range("C65536").End(xlUp).Offset(1, 0).Formula = "=sum(C2:C" & Range("C65536").End(xlUp).Row & " _
_
)/1000"
Range("D65536").End(xlUp).Offset(1, 0).Formula = "=sum(D2:D" & Range("D65536").End(xlUp).Row & " _
_
)/1000"
Range("E65536").End(xlUp).Offset(1, 0).Formula = "=(sum(E2:E" & Range("E65536").End(xlUp).Row &  _
_
"))/" & Zeilen & "*3.6"
Range("F65536").End(xlUp).Offset(1, 0).Formula = "=sum(F2:F" & Range("F65536").End(xlUp).Row & " _
_
)/1000"
ActiveCell.Offset(1, -1).Select
ActiveCell.FormulaR1C1 = "SUM:"
Selection.Font.Bold = True
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "AVG:"
Selection.Font.Bold = True
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value / Zeilen


Anzeige
AW: Makro über alle Tabellenblätter laufen lassen
25.07.2008 15:43:17
Worti
Hallo Philipo,
initialisierst du deine Variablen icounter etc.. auch schön vor jedem Umlauf?
Gruß Worti

AW: Makro über alle Tabellenblätter laufen lassen
25.07.2008 15:53:00
Philipo
Danke für den Tip!!!
am Schluss noch iCounter = 0 gesetzt und siehe da die Werte stimmen :)

iCounter = 0
Next ws
End Sub


Merci!
Viele Grüße
Phibo

AW: Makro über alle Tabellenblätter laufen lassen
25.07.2008 15:57:00
Worti
Tja, so ist das öfter: Kaum macht man's richtig ;-)
Schönes WE
Worti

40 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige