Excel neuestes Tabellenblatt jeden Montag automatisch drucken
Excel Problem automatisches drucken des aktuellsten Tabellenblatts
Hallo zusammen,
stehe vor folgendem Problem. Ich habe eine Excel Datei, in der jeden Freitag ein neuen Tabellenblatt hinzugefügt (KW 41, dann KW 42 usw..) in der die Aufträge der jeweiligen KW drin steht
Ich brauche eine Batch oder ein Makro, das von dieser Datei jeden Montag morgen das neuste Tabellenblatt automatisch ausdruckt.
Habe die vbs soweit, das Problem ist , ich weiß nicht ob der Ansatz so richtig ist und vorallem wie bekomme ich es hin, das er automatisch immer nur das aktuellste Tabellenblatt druckt : (z.B. nur KW 42)`?
Die vbs würde ich dann in den Taskplaner eintragen (ZB Montag 06.00 Uhr) und wenn ich dann in das Geschäft komme, liegen die Aufträge der aktuellen KW schon bereit im Drucker.
Weiß irgendjemand wie man soetwas umsetzen kann?
so weit bin ich gekommen:
' Datei mit einem normale Editor anlegen
' Dateiendung .VBS
' Excel (versteckt) öffnen
Set appXLS = CreateObject("Excel.Application")
' Workbook (versteckt) und schreibgeschützt öffnen
Set wbkXLS = appXLS.Workbooks.Open("C:\auftragstabelle.xls", , True)
' Tabelle1 ausdrucken
wbkXLS.sheets("Tabelle1").PrintOut
' Workbook schließen
wbkXLS.Close
Set wbkXLS = Nothing
appXLS.Quit
Set appXLS = Nothing
Gruß + Danke
lordofremixes
Hallo zusammen,
stehe vor folgendem Problem. Ich habe eine Excel Datei, in der jeden Freitag ein neuen Tabellenblatt hinzugefügt (KW 41, dann KW 42 usw..) in der die Aufträge der jeweiligen KW drin steht
Ich brauche eine Batch oder ein Makro, das von dieser Datei jeden Montag morgen das neuste Tabellenblatt automatisch ausdruckt.
Habe die vbs soweit, das Problem ist , ich weiß nicht ob der Ansatz so richtig ist und vorallem wie bekomme ich es hin, das er automatisch immer nur das aktuellste Tabellenblatt druckt : (z.B. nur KW 42)`?
Die vbs würde ich dann in den Taskplaner eintragen (ZB Montag 06.00 Uhr) und wenn ich dann in das Geschäft komme, liegen die Aufträge der aktuellen KW schon bereit im Drucker.
Weiß irgendjemand wie man soetwas umsetzen kann?
so weit bin ich gekommen:
' Datei mit einem normale Editor anlegen
' Dateiendung .VBS
' Excel (versteckt) öffnen
Set appXLS = CreateObject("Excel.Application")
' Workbook (versteckt) und schreibgeschützt öffnen
Set wbkXLS = appXLS.Workbooks.Open("C:\auftragstabelle.xls", , True)
' Tabelle1 ausdrucken
wbkXLS.sheets("Tabelle1").PrintOut
' Workbook schließen
wbkXLS.Close
Set wbkXLS = Nothing
appXLS.Quit
Set appXLS = Nothing
Gruß + Danke
lordofremixes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 175940
Url: https://administrator.de/forum/excel-neuestes-tabellenblatt-jeden-montag-automatisch-drucken-175940.html
Ausgedruckt am: 02.04.2025 um 03:04 Uhr
30 Kommentare
Neuester Kommentar
Hallo lordofremixes!
Unter der Annahme, dass die Benennung konsequent (also immer mit Leerzeichen vor der Wochennummer) erfolgt, könntest Du das Blatt mit der höchsten Nummer so finden:
Grüße
bastla
P.S.: Verwende doch bitte "Code"- ...
Unter der Annahme, dass die Benennung konsequent (also immer mit Leerzeichen vor der Wochennummer) erfolgt, könntest Du das Blatt mit der höchsten Nummer so finden:
...
Aktuell = 0
Pre = "KW "
For Each Blatt In wbkXLS.Worksheets()
BN = Blatt.Name
If Left(BN, Len(Pre)) = Pre Then
Woche = CInt(Split(BN)(1))
If Woche > Aktuell Then Aktuell = Woche
End If
Next
wbkXLS.Worksheets(Pre & Aktuell).PrintOut
...
bastla
P.S.: Verwende doch bitte "Code"- ...
Moin,
mal gesetzt den Fall, daß das neue Tabellenblatt immer mit "KW " und der Kalenderwoche benannt ist, dann könnte folgende Vorgehensweise zielführend sein:
- über die Excel-Funktion (Kalenderwoche) die aktuelle Kalenderwoche herausfinden
- über die Excel-Funktion (Wochentag) den aktuellen Wochentag herausfinden
- über die Excel-Funktion (Rechts) die letzten beiden Stellen des Tabellenblattnamens herausfinden
- wenn nun die letzten beiden Stellen des Tabellenblattnamens gleich der Kalenderwoche sind und zusätzlich der Wochentag noch ein Montag, dann soll das Tabellenblatt mit dem Namen "KW xx" gedruckt werden.
- das ganze als Autostart-Makros sollte dann funktionieren.
Gruß J
chem
mal gesetzt den Fall, daß das neue Tabellenblatt immer mit "KW " und der Kalenderwoche benannt ist, dann könnte folgende Vorgehensweise zielführend sein:
- über die Excel-Funktion (Kalenderwoche) die aktuelle Kalenderwoche herausfinden
- über die Excel-Funktion (Wochentag) den aktuellen Wochentag herausfinden
- über die Excel-Funktion (Rechts) die letzten beiden Stellen des Tabellenblattnamens herausfinden
- wenn nun die letzten beiden Stellen des Tabellenblattnamens gleich der Kalenderwoche sind und zusätzlich der Wochentag noch ein Montag, dann soll das Tabellenblatt mit dem Namen "KW xx" gedruckt werden.
- das ganze als Autostart-Makros sollte dann funktionieren.
Gruß J
Hallo Jochem!

Aber im Ernst - wie sollte denn Dein Script gestartet, bzw wie sollte die Excel-Datei automatisch geöffnet werden, damit sich
Grüße
bastla
viele Wege führen nach Rom ...
Wenn er aber nach Wanne-Eickel will ... Aber im Ernst - wie sollte denn Dein Script gestartet, bzw wie sollte die Excel-Datei automatisch geöffnet werden, damit sich
wenn ich dann in das Geschäft komme, liegen die Aufträge der aktuellen KW schon bereit im Drucker.
realisieren lässt?Grüße
bastla
Moin bastla,
das sind für mich zwei Paar Schuhe: zum einen den Ausdruck starten und zum anderen das richtige Tabellenblatt finden.
Zu 1) ist sicherlich ein geplanter Task sinnvoll, der das Tabellenblatt druckt
Zu 2) ist m.M.n. das Autostart-Makro sinnvoll (liegt wahrscheinlich daran, daß ich mit vbs nix anfangen kann und daher lieber auf das zurückgreife, von dem ich meine, es zu können).
Gruß J
chem
das sind für mich zwei Paar Schuhe: zum einen den Ausdruck starten und zum anderen das richtige Tabellenblatt finden.
Zu 1) ist sicherlich ein geplanter Task sinnvoll, der das Tabellenblatt druckt
Zu 2) ist m.M.n. das Autostart-Makro sinnvoll (liegt wahrscheinlich daran, daß ich mit vbs nix anfangen kann und daher lieber auf das zurückgreife, von dem ich meine, es zu können).
Gruß J
Hallo lordofremixes!
Mein Stückchen Code soll nur aus allen Tabellenblättern, die mit "KW" + Leerzeichen beginnen, jenes mit der höchsten Wochennummer suchen und den Ausdruck vornehmen - es ersetzt daher nur Deine bisherige Zeile
Grüße
bastla
Mein Stückchen Code soll nur aus allen Tabellenblättern, die mit "KW" + Leerzeichen beginnen, jenes mit der höchsten Wochennummer suchen und den Ausdruck vornehmen - es ersetzt daher nur Deine bisherige Zeile
wbkXLS.sheets("Tabelle1").PrintOut
Geht au irgendwie KW 44/2011
Besser wäre "KW 2012/01"(Woche immer zweistellig) - dann könnte einfach der Teil nach dem Leerzeichen als String verglichen werden - der (ungetestete) Code dazu sähe dann so aus:...
Aktuell = ""
Pre = "KW "
For Each Blatt In wbkXLS.Worksheets()
BN = Blatt.Name
If Left(BN, Len(Pre)) = Pre Then
Woche = Split(BN)(1)
If Woche > Aktuell Then Aktuell = Woche
End If
Next
MsgBox "Neuestes Blatt: " & Pre & Altuell 'nur zum Testen
wbkXLS.Worksheets(Pre & Aktuell).PrintOut
...
bastla
Hallo lordofremixes!
Da musst Du eigentlich nur ein Schleifchen um die Verabeitung der einzelnen Datei wickeln - ungetestet etwa so:
Grüße
bastla
Da musst Du eigentlich nur ein Schleifchen um die Verabeitung der einzelnen Datei wickeln - ungetestet etwa so:
Dateien = Array("C:\excel\auftrag.xls", "C:\excel\auftrag2.xls", "C:\excel\auftrag3.xls") 'zu verarbeitende Dateien
' Excel (versteckt) öffnen
Set appXLS = CreateObject("Excel.Application")
For Each Datei In Dateien
' Workbook (versteckt) und schreibgeschützt öffnen
Set wbkXLS = appXLS.Workbooks.Open(Datei, , True)
'Tabelle1 ausdrucken
Aktuell = ""
Pre = "KW "
For Each Blatt In wbkXLS.Worksheets()
BN = Blatt.Name
If Left(BN, Len(Pre)) = Pre Then
Woche = Split(BN)(1)
If Woche > Aktuell Then Aktuell = Woche
End If
Next
MsgBox "Neuestes Blatt: " & Pre & Aktuell
'nur zum Testen
wbkXLS.Worksheets(Pre & Aktuell).PrintOut
' Workbook schließen
wbkXLS.Close
Next
Set wbkXLS = Nothing
appXLS.Quit
Set appXLS = Nothing
bastla
Hallo lordofremixes!
... genügt es, die Zeilen 12 bis 18 durch etwas in der Art
zu ersetzen ...
Grüße
bastla
Gibt es eine Möglichkeit, den Quellcode so zu verändern , das er nicht die letzte KW ausdruckt , sondern die aktuelle?
Wenn Du "aktuelle" (bzw "Berechnung KW") definieren kannst ...... genügt es, die Zeilen 12 bis 18 durch etwas in der Art
Aktuell = Berechnung KW
Grüße
bastla
Hallo lordofremixes!
Soferne das die verwendet Excel-Version kann (Stichwort: Funktion "KALENDERWOCHE()" verfügbar), etwa so:
Ansonsten findest Du zB hier eine Berechnungsmethode ...
Grüße
bastla
Soferne das die verwendet Excel-Version kann (Stichwort: Funktion "KALENDERWOCHE()" verfügbar), etwa so:
Aktuell = WorksheetFunction.WeekNum(Date)
Grüße
bastla
Hallo lordofremixes!
Wie ich schon erwähnte: "Soferne das die verwendete Excel-Version kann" ...
... andererseits hatte ich doch einen Link angeboten (und von dort stammt die unten verwendete Berechnungsmethode) ...
Anyhow: So könnte das auch bei Dir klappen:
Grüße
bastla
Wie ich schon erwähnte: "Soferne das die verwendete Excel-Version kann" ...
... andererseits hatte ich doch einen Link angeboten (und von dort stammt die unten verwendete Berechnungsmethode) ...
Anyhow: So könnte das auch bei Dir klappen:
Dateien = Array("C:\excel\auftrag.xls", "C:\excel\auftrag2.xlsx") 'zu verarbeitende Dateien
Pre = "KW "
kw = 4 + Date - Weekday(Date, 2)
Aktuell = (kw - DateSerial(Year(kw), 1, -6)) \ 7
' Excel (versteckt) öffnen
Set appXLS = CreateObject("Excel.Application")
For Each Datei In Dateien
' Workbook (versteckt) und schreibgeschützt öffnen
Set wbkXLS = appXLS.Workbooks.Open(Datei, , True)
'Tabelle1 ausdrucken
MsgBox "Neuestes Blatt: " & Pre & Aktuell
'nur zum Testen
wbkXLS.Worksheets(Pre & Aktuell).PrintOut
' Workbook schließen
wbkXLS.Close
Next
Set wbkXLS = Nothing
appXLS.Quit
Set appXLS = Nothing
bastla
Hallo lordofremixes!
Der Tabellenblattname wird (wie ja auch in Zeile 13 ausgegeben wird) aus den Variableninhalten von "Pre" und "Aktuell" zusammengesetzt - daher ggf den Inhalt von "Pre" anpassen ...
... und falls tatsächlich führende Nullen (also "06" anstatt "6") für die Wochennummer gewünscht sind, anstelle von nur "Aktuell"
verwenden.
Grüße
bastla
Der Tabellenblattname wird (wie ja auch in Zeile 13 ausgegeben wird) aus den Variableninhalten von "Pre" und "Aktuell" zusammengesetzt - daher ggf den Inhalt von "Pre" anpassen ...
... und falls tatsächlich führende Nullen (also "06" anstatt "6") für die Wochennummer gewünscht sind, anstelle von nur "Aktuell"
Right("0" & Aktuell, 2)
Grüße
bastla