Blatt in HTML exportieren wenn Checkbox aktiv ist
Unwissender
Servus, vielleicht kann mir hier einer weiterhelfen bei einem Dienstplan. In der Mappe gibt es für jeden Monat ein Blatt was immer nach dem Schema mm_jj aufgebaut ist, also für diesen Monat z.B. 04_24
für den Folgemonat, also 05_24 gibt es ebenfalls schon ein Blatt für die Vorplanung.
das Ganze wird beim Speichern als HTML exportiert um das auf einem Display anzeigen zu können. Das Makro dazu erstellt eine neue temporäre Mappe und kopiert sich bestimmte Bereiche der Mappe in die neue Temporäre Mappe mit einer bestimmten Formatierung - funktioniert auch alles wunderbar.
Jetzt möchte ich aber gerne, dass es die Monatsblätter erst anzeigt/exportiert, wenn eine entsprechende Checkbox (CheckBox1) aktiv ist die es auf jedem Monatsblatt gibt.
diese heißt eben auch immer CheckBox1 da immer das aktuelle Monatsblatt als Vorlage für den neuen Monat kopiert wird...Dabei soll es egal sein auf welchem Blat ich mich derzeit befinde beim Speichern (Activesheet geht damit schonmal nicht)
Ganz unten in den letzten paar Zeilen habe ich markiert, wo was angepasst werden muss, bestimmt mit if abfrage - aber wie am besten lösen?
das ist der Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
' Kopie des Dienstplans zur Anzeige
Druckbereich_Speichern
End Sub
Sub Druckbereich_Speichern()
Dim wb As Workbook, ws As Worksheet, NewName As String, rBereich As String, WsName As String
Dim nb As Workbook
Dim fDisplayAlerts As Boolean
fDisplayAlerts = Application.DisplayAlerts ' akt. Einstellung zu Meldungen merken und unten ...
Application.DisplayAlerts = False
Set wb = ActiveWorkbook
WsName = ActiveSheet.Name
NewName = "C:\Temp\DienstPlan.html" ' so heißt die Datei zur Anzeige des Dienstplans auf Display
Set nb = Application.Workbooks.Add ' damit wird die neue (leere) Excel-Datei erzeugt und auch aktiv
Application.ScreenUpdating = False
For Each ws In wb.Worksheets
' gehe über alle Arbeitsblätter (Worksheets/TabSheets).
' Wenn der Name des Arbeitsblattes in der Liste steht (s.u.), dann wird es kopiert in die neue Arbeitsmappe.
If InCopyList(ws.Name) Then ' Wenn in der Liste der zu kopierenden Worksheets enthalten
'ws.Activate
rBereich = ws.PageSetup.PrintArea ' ActiveSheet.PageSetup.PrintArea
If rBereich <> "" Then ' kopiere nur den eingestellten Druckbereich
ws.Range(rBereich).Copy
nb.Activate
nb.ActiveSheet.Name = ws.Name
Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats 'Werte und Zellformate einfügen
Range("A1").PasteSpecial Paste:=xlPasteFormats 'Formatierungen einfügen
Range("A1").PasteSpecial Paste:=xlPasteColumnWidths 'Spaltenbreiten einfügen
Range("A1").Select 'Select um Bereichsmarkierung aufzuheben
Application.CutCopyMode = False
Else
Range("A1").Value = "Kein Druckbereich festgelegt."
End If
nb.Worksheets.Add After:=nb.Worksheets(nb.Worksheets.Count) ' ein neues TabSheet anfügen für den nächsten Durchlauf
End If
Next
'nb.Worksheets(WsName).Activate
nb.Worksheets(1).Activate ' damit steht der Dienstplan immer auf dem aktuellen Monat
' Am Ende der Schleife füge pauschal ein Tabellen-Blatt ein. Das letzte (nicht benötigte) wird rausgeschmissen
For Each ws In nb.Worksheets
If Not InCopyList(ws.Name) Then
nb.Worksheets(ws.Name).Delete
End If
Next
' Speichern im html-Format (macht sich besser mit dem SiteKiosk)
'ActiveWorkbook.SaveAs Filename:=wb.Path & "\" & NewName & ".html", FileFormat:=xlHtml
ActiveWorkbook.SaveAs NewName, FileFormat:=xlHtml
ActiveWorkbook.Close
wb.Activate
Application.ScreenUpdating = True
Application.DisplayAlerts = fDisplayAlerts ' ... wiederherstellen
End Sub
---
Function InCopyList(strIn As String) As Boolean
Dim TabSheetList(4) As String
TabSheetList(0) = Format(Now(), "mm_yy") <--- Hier soll geprüft werden ob die Checkbox aktiv ist oder nicht
TabSheetList(1) = Format(DateAdd("m", 1, Now()), "mm_yy") <--- und hier soll auch geprüft werden ob die Checkbox aktiv ist oder nicht
TabSheetList(3) = Format("Plankürzel")
TabSheetList(4) = Format("Jahresurlaub")
TabSheetList(5) = Format("Feiertage") 'wird gebraucht um Feiertage auch in der neuen Temporären Arbeitsmappe mittels sverweis anzuzeigen
InCopyList = Not (IsError(Application.Match(strIn, TabSheetList, 0)))
End Function