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

Mehrere Tabellenblätter markieren

Mehrere Tabellenblätter markieren
09.07.2023 17:50:37
Marco

Hallo,

ich stehe leider derzeit auf dem Schlauch. Ich hab eine Excel Datei mit 52 Tabellenblättern als Kalenderwochen (von 1 bis 52 nummeriert). Zusätzlich hab ich dann noch ca 20 weitere Tabellenblätter mit richtigen Namen.

Die aktuelle Kalenderwoche wird ausgelesen und als String als KWPDF gespeichert.

Jetzt möchte ich, dass Excel alle Kalenderwochen von der aktuellen Kalenderwoche bis zur Kalenderwoche 52 alle markiert und dann alle als eine einzige PDF Datei speichert.

Ich hab es bisher so probiert:

Dim m As Integer
Dim arrSH(1 to 52) As Variant

KWPDF = Kalenderwoche_berechnen(Date)

Fit m = KWPDF to 52
arrSH(m) = m
Next
Worksheets(arrSH).Select

Und danach kommt quasi noch Selection.ExportAs blablabla

Leider bekomm ich immer die Fehlermeldung Index außerhalb des gültigen Bereichs bei arrSH(m) = m

Könnt ihr mir irgendwie weiterhelfen??

Danke vorab?

LG Marco

35
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 18:28:55
Pappawinni
Wenn ich es recht habe, könnte es auch eine KW53 geben, da würde dann auch etwas schief gehen.
Aber, was ich fragen wollte, was macht denn
Fit m = KWPDF to 52
???


AW: Mehrere Tabellenblätter markieren
09.07.2023 18:37:38
Pappawinni
In 2028,2056, 2084, 2124, 2152, 2180, 2220, 2248, 2316, 2344 und 2380
soll es sogar eine KW54 geben.


AW: Mehrere Tabellenblätter markieren
10.07.2023 13:08:27
Pappawinni
Um auch das noch zu klären.
In USA hat man offenbar Kalenderwochen noch anders definiert und die Woche beginnt nicht am Montag, sondern mit Sonntag.
Der 1.Januar ist da grundsätzlich in Woche 1, auch wenn die Woche dann nur aus einem Tag besteht.
Ebenso werden auch die letzten Tage des Jahres noch als eigene Kalenderwoche gezählt, wenn da gerade eine Woche beginnt. Ein Tag reicht auch da.
Von daher könnte es da noch 54 Kalenderwochen geben. (Analoge Regelung gab es nach DIN 1355 vor 1975 auch bei uns)

Nach der ISO-Norm (DIN ISO 8601) ist das nicht mehr möglich. Hier müssen mindestens 4 Tage der Woche innerhalb des Jahres liegen, um für dieses Jahr als Kalenderwoche zu zählen und die Woche beginnt mit Montag.


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 18:38:18
Marco
Oh ups, Fit sollte natürlich For heißen. Ändert aber nichts, dass der Fehler kommt.

Sprich For m = KWPDF to 52
Also die aktuelle Kalenderwoche bis zur 52.
Das soll verhindern, dass ich nur die 52 hab und nicht direkt 53 wähle. Das würde ja dann wie du bereits sagst zu einem Fehler kommen..


AW: Mehrere Tabellenblätter markieren
09.07.2023 18:39:27
onur
Nehme an, das ist ein Tippfehler und soll "For" heissen:
Fit m = KWPDF to 52
Ausserdem: Du hast ein Array mit 52 Werten. WAS steht denn deiner Meinung nach in arrSH(1) bis arrSH(12), wenn wir jetzt KW13 hätten? NIX.
Du versucht also, bei Worksheets(arrSH).Select Blätter zu selektieren, die nicht vorhanden sind bzw nicht mal einen Namen haben ?


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 18:43:33
Marco
Oh man, klar macht natürlich Sinn.... Sorry so fit bin ich noch nicht in VBA aber ja klar, jetzt zB hätte ich 26 blinde Arrays bei KW 27.

Sprich ich müsste eigentlich dann Beispiel KW 27 alle KW von 27 bis 52 nehmen und in Array 1 bis 26 umschreiben. Richtig?


AW: Mehrere Tabellenblätter markieren
09.07.2023 18:49:28
onur
"hätte ich 26 blinde Arrays " - Nein EIN Array mit 26 leeren Elementen ! :)


AW: Mehrere Tabellenblätter markieren
09.07.2023 18:55:46
Marco
Stimmt natürlich... :D danke


AW: Mehrere Tabellenblätter markieren
09.07.2023 18:46:27
onur
Ausserdem muss der Name des Blattes ein String sein.
Ungetestet:
Dim m As Integer
Dim arrSH() As String
KWPDF = Kalenderwoche_berechnen(Date)
Redim arrSH(KWPDF TO 52)
FOR m = KWPDF to 52
    arrSH(m) = CStr(m)
Next
Worksheets(arrSH).Select


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 18:56:09
Pappawinni
Und wenn kwpdf = 53 oder =54, geht das noch immer schief


AW: Mehrere Tabellenblätter markieren
09.07.2023 18:59:01
Marco
Stimmt, die KW berechnet sich ja. Mein erstes Tabellenblatt nach der KW 52, oder bei Bedarf 53 oder 54 heißt "neues Jahr"

Kann ich es damit eingrenzen? Sprich mit -1?


AW: Mehrere Tabellenblätter markieren
09.07.2023 19:00:42
onur
Hääääh ? Wie das?
Teste mal:
For z = 3 To 2
    Stop
Next z
Der Code stoppt nicht, da die Schleife nicht betreten wird, wenn z grösser als 2 ist.


AW: Mehrere Tabellenblätter markieren
09.07.2023 19:13:05
Pappawinni
Redim arrSH(53 TO 52)
funktioniert?


AW: Mehrere Tabellenblätter markieren
09.07.2023 19:18:29
onur
Dass er, wenn das Jahr 53 KWs hat, auch 53 Blätter anlegen muss, ist ihm wohl auch schon klar, spätestens wenn er erst mal die Daten eintragen muss, die er ausdrucken will.


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 19:31:25
Marco
Hab das Ganze jetzt so gelöst, dass ich das erste Tabellenblatt mit Namen nach der letzten KW (52 oder 53 oder 54) mit dem Index auslese und dann mit -1 ins zurück gehe. Dann hab ich bei Bedarf automatisch die KW 53 oder 54

Sprich KWPDFEnde = ThisWorkbook.Worksheets("neues Jahr").Index - 1

Und später Redim arrSH(KWPDF to KWPDFEnde)
For m = KWPDF to KWPDFEnde

Dann geht's komplett. Danke euch allen :)


AW: Mehrere Tabellenblätter markieren
09.07.2023 19:38:35
onur
SO brauchst du nix am Code zu ändern, sondern nur bei Jahresbeginn Blatt 53 anlegen, wenn nötig:
Dim m As Integer
Dim arrSH() As String
Dim KWMax as Long
KWMax = CLng(Format("31.12." & Year(Date), "ww"))
KWPDF = CLng(Date, "ww"))
Redim arrSH(KWPDF TO KWMax)
FOR m = KWPDF to KWMax
    arrSH(m) = CStr(m)
Next
Worksheets(arrSH).Select
Und die Funktion Kalenderwoche_berechnen brauchst du auch nicht mehr.


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 19:42:10
Marco
Ah geil danke!! Funktioniert tadellos!


AW: Mehrere Tabellenblätter markieren
09.07.2023 19:46:59
onur
Sorry:
Statt
KWPDF = CLng(Date, "ww"))
das

KWMax = CLng(Format(Date, "ww"))


AW: Mehrere Tabellenblätter markieren
09.07.2023 20:12:06
Pappawinni
Also Kinners,
ich hab mal gerechnet und meine, dass es selbst in einem Schaltjahr keine KW54 geben kann. Da bin ich wohl einer Internet-Ente aufgesessen.
Aber es gibt z.B. in 2026 immerhin eine KW53.


AW: Mehrere Tabellenblätter markieren
09.07.2023 20:14:29
Marco
Alles gut :)
Ich find es löblich, wenn sich jemand so mit der Frage von einem Unbekannten" beschäftigt und einem helfen will! Das schätze ich an dem Forum so!


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 20:29:39
Pappawinni
Das mit den Kalenderwochen ist eine etwas heikle Geschichte.
Es ist zum Beispiel so, dass, wenn in die letzte Woche des Jahres keinen Donnerstag enthält, dann gehören diese Tage schon in die KW1 des Folgejahres.
Andererseits gehören natürlich die ersten Tage des Jahres eventuell noch zur letzten Kalenderwoche des Vorjahres...


AW: Mehrere Tabellenblätter markieren
09.07.2023 20:56:20
onur
Dafür gibt es ja bei Excel die ISOKALENDERWOCHE bzw bei VBA WorksheetFunction.IsoWeekNum.


AW: Mehrere Tabellenblätter markieren
09.07.2023 21:45:14
Pappawinni
Dem Normalsterblichen ist das aber vielleicht nicht so bewusst und wundert sich vielleicht, dass dann für Silvester die Woche 1 heraus kommt, oder für Neujahr die Woche 53....
Excelgötter stehen da natürlich drüber.


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 19:01:35
Marco
Also der SUB läuft durch und legt mir auch 26 Blätter an. Allerdings sind die alle komplett leer / weiß mit dem Inhalt nur einer einzigen Zelle.

Ich kann aber nicht genau sagen, welche Zelle das genau ist.


AW: Mehrere Tabellenblätter markieren
09.07.2023 19:05:02
onur
Häääh ? Die Sub legt nix an, sie SELEKTIERT nur die Blätter. Sind sie denn selektiert?


AW: Mehrere Tabellenblätter markieren
09.07.2023 19:09:24
Marco
Ja ich hab das ja in meinen Code mit eingebaut und dann danach die selektierten Blätter als PDF speichern lassen. Funktioniert aber tatsächlich soweit. Hatte gerade nur einen Schreibfehler drin.
Ich bekomme jetzt alle KWs als PDF gespeichert. Danke!


Gerne !
09.07.2023 19:10:19
onur


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 19:04:39
Ulf

Public Sub test()
    Dim lngZähler As Long
    Dim arrSH() As String
    Dim lngAb As Long
    Dim lngMAX As Long
    Dim wb As Workbook
    'FEHLT !!
    'KWPDF = Kalenderwoche_berechnen(Date)
    lngMAX = 7
    lngAb = 1
    ReDim arrSH(lngMAX - lngAb)
    Set wb = ThisWorkbook
    For lngZähler = 0 To UBound(arrSH)
        arrSH(lngZähler) = wb.Worksheets(lngAb + lngZähler).Name
    Next lngZähler
    Sheets(arrSH).Select
    Sheets(arrSH(0)).Activate
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        wb.Path & "\PDFExportAlleBlätter.pdf" _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
End Sub


Anzeige
AW: Mehrere Tabellenblätter markieren
09.07.2023 19:17:56
Marco
Hab es gerade probiert, da kommt der Fehler beim Kompilieren, ungültiger Verweis auf Next Steuervariable. Und markiert wird Next lngZähler


AW: Mehrere Tabellenblätter markieren
09.07.2023 20:14:24
GerdL
Moin,
ohne Bastelberger.
Sub Unit()

    Dim currentWeek As Integer, maxWeek As Integer, i As Integer
    Dim arrSH() As String, Sh As Object
    
    currentWeek = DatePart("ww", Date)
    maxWeek = Application.Max(52, DatePart("ww", DateSerial(Year(Date), 12, 31)))
    
    For Each Sh In Sheets
        If IsNumeric(Sh.Name) Then
            If Int(Sh.Name) >= currentWeek And Int(Sh.Name) = maxWeek Then
                ReDim Preserve arrSH(i)
                arrSH(i) = CStr(Sh.Name)
                i = i + 1
            End If
        End If
    Next
    
    Sheets(arrSH).Select

End Sub
Gruß Gerd


AW: Mehrere Tabellenblätter markieren
09.07.2023 20:59:33
Pappawinni
Microsaft sagt:
DatePart-Funktionen können eine falsche Wochennummer für den letzten Montag im Jahr zurückgeben....


AW: Mehrere Tabellenblätter markieren
09.07.2023 21:27:20
GerdL
Aja, interessant; wenn man an Sylverster codet oder eine falsches Blatt 53 hat.
Ansonsten ist es bei meinem Code egal.


AW: Mehrere Tabellenblätter markieren
10.07.2023 13:29:27
Rudi Maintaire
Hallo,
nur die Markiererei:
Sub aa()
  Dim iWeek As Integer
  For iWeek = WorksheetFunction.IsoWeekNum(Date) To WorksheetFunction.IsoWeekNum(DateSerial(Year(Date), 12, 31))
    Sheets(CStr(iWeek)).Select False
  Next
End Sub
Gruß
Rudi


AW: Mehrere Tabellenblätter markieren
10.07.2023 21:49:43
Pappawinni
Das funktioniert in 2023, in 2024 liegt Silvester (ein Dienstag) bereits in KW1 von 2025.
Kalenderwoche nach ISO zählt nur für das Jahr, in dem auch der Donnerstag der Woche liegt.
Gerd hatte da, wie ich finde, ne schöne Lösung mit max(52, WorksheetFunction.IsoWeekNum(DateSerial(Year(Date), 12, 31))) oder so..


AW: Mehrere Tabellenblätter markieren
10.07.2023 19:27:47
Marc
du kannst es über eine Hilfstabelle sag mal am elegantestes lösen...

du lädst nach und nach alle Daten die du in eine
PDF willst,
chronologisch in eine neue Tabelle, merkst die Start Zeile und Spalte
merkst die End Zeile und Spalte

markierst die und machst daraus eine PDF..
danach löscht die Tabelle wieder..

Das ist natürlich ein "Umweg" aber hat
a) den Vroteil, das du keine Daten in den Tablellenblättern änderst, sie nur "kopierst"
b) du das Design entsprechend deiner Programmierung sogar noch ändern kannst (z.B. Spalte/Zeilen Weg lassen/hinzufügen etc...)

Ich persönlich bin immer ein großer Fan davon, Datenhaltung und Ausgabe in ein von mir gewünschtes Format zu trennen, so das die Daten bei Änderung der Zusammenstellung oder Sortierung etc... nicht verändert sind(also konsistent sind) und nicht durch kleine unbeabsichtliche Fehler verändert werden..
Dazu gehe ich den Umweg und hole mir die Daten aus der konsistente Tabelle/Datei und ordne und designe die Ausgabe wie ich es brauche..
Das ist mitunter etwas langsamer, aber für die Datensicherer... Für kleine Datenmengen, ist der langsamere Zeitaufwand zu vernachlässigen...

61 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige