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

Save as XLSX und PDF

Save as XLSX und PDF
02.09.2017 16:48:39
Knauer
Als Resultat meiner letzten Anfrage und der erhaltenen Lösung laufen meine Objekte aus einem Array zusammen mit einem zweiten Macro, indem letztlich einzelne, gefilterte Excelsheets erzeugt werden.
Das Ergebnis soll nun gesichert werden als *.xlsx und auch als PDF, das zur Anzeige benutzt wird. Meine Lösung ist sehr mechanisch (kann es leider noch nicht besser) für beide Fälle. Außerdem ist das Problem, dass bei einem zweiten Durchlauf (nach einer Änderung im Hauptfile) die Einzelfiles schon existieren und daher erst gelöscht werden müssen. Meine Lösung ist ein Macro mit einer delete-Funktion. Damit könnte ich leben.
Die Frage ist aber, wie könnte eine elegantere Lösung aussehen, die die ganze Prozedur automatisch ohne Rückfrage ablaufen läßt – auch beim ersten und zweiten Mal. Meine Lösung sieht momentan so aus:

Option Explicit
Public Sub DeleteSheets()
'Raumpatchlisten selektieren
Sheets(Array("301", "302", "303", "304")).Select
Sheets("301").Activate
'Aktive Tabellen löschen
ActiveWindow.SelectedSheets.Delete
Sheets("3.OG").Select
'Folgemacro aufrufen
'Call RaumArray     - momentan nicht aktiviert
End Sub


Public Sub RaumArray()
Dim r As Variant
'Array mit den Raumnummern für die Raumpatchlisten
For Each r In Array("301", "302", "303", "304")
Call Tabelle(r)
Next
End Sub

Private Sub Tabelle(ByVal r As Variant)
'neue Tabelle aus Tab 300 erzeugen und ans Ende stellen
Worksheets("300").Copy After:=Sheets(Sheets.Count)
'Tabelle umbenennen
ActiveSheet.Name = r
'Tabelleninhalt löschen
Range("A2:T55").ClearContents
With Worksheets("3.OG")
'Haupttabelle 3.OG Raumspalte filtern
.Range("$A$1:$T$346").AutoFilter Field:=1, Criteria1:="=" & r
'Ergebnis kopieren zur neu erzeugten Tabelle
.UsedRange.Copy Range("A1")
'Filter deaktivieren
Call .ShowAllData
End With
Worksheets("3.OG").Select
End Sub
Public Sub SAVEasXLSX()
' SAVEasXLSX Makro
Sheets("301").Select
Sheets("301").Copy
ChDir "F:\Patchlisten"
ActiveWorkbook.SaveAs Filename:= _
"F:\Patchlisten\301_it_nw_pl_lanpatchliste.xlsx", FileFormat _
:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Sheets("3.OG").Select
Sheets("302").Select
Sheets("302").Copy
ChDir "F:\Patchlisten"
ActiveWorkbook.SaveAs Filename:= _
"F:\Patchlisten\302_it_nw_pl_lanpatchliste.xlsx", FileFormat _
:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Sheets("3.OG").Select
Sheets("303").Select
Sheets("303").Copy
ChDir "F:\Patchlisten"
ActiveWorkbook.SaveAs Filename:= _
"F:\Patchlisten\303_it_nw_pl_lanpatchliste.xlsx", FileFormat _
:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Sheets("3.OG").Select
Sheets("304").Select
Sheets("304").Copy
ChDir "F:\Patchlisten"
ActiveWorkbook.SaveAs Filename:= _
"F:\Patchlisten\304_it_nw_pl_lanpatchliste.xlsx", FileFormat _
:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Sheets("3.OG").Select
Call createPDF
End Sub

Public Sub createPDF()
' createPDF Makro
Sheets("301").Select
ChDir "F:\Patchlisten"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"F:\Patchlisten\301_it_nw_pl_lanpatchliste.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Sheets("302").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"F:\Patchlisten\302_it_nw_pl_lanpatchliste.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Sheets("303").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"F:\Patchlisten\303_it_nw_pl_lanpatchliste.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Sheets("304").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"F:\Patchlisten\304_it_nw_pl_lanpatchliste.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Worksheets("3.OG").Select
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Save as XLSX und PDF
02.09.2017 18:04:09
onur
Versuch das mal:
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs .......
Application.DisplayAlerts = True
AW: Save as XLSX und PDF
02.09.2017 18:58:51
Knauer
Ja, das funktioniert. Danke. Ich habe bei den Makros DeleteSheets, SaveAsXLSX, und createPDF einfach
die Zeile Application.DisplayAlerts = False eingefügt und damit ändert sich die Standardantwort auf ja und es kommen keine Rückfragen mehr. Jetzt könnte ich alle Makros zusammenhängen.
Es bleibt noch das Problem bei den Makros SaveAsXLSX und createPDF. Hier wollte ich eigentlich die Werte aus dem Array übergeben (so wie beim Makro Tabelle mit freundlicher Unterstützung von Nepomuk) und jedes Excelfile speichern und jeweils als PDF erzeugen. Gibt es dafür noch eine Lösung? Beim Versuch das Prinzip aus dem Makro Tabelle zu übernehmen, komme ich nicht weiter.
Anzeige
AW: Save as XLSX und PDF
02.09.2017 19:17:30
Nepumuk
Hallo Knauer,
dann so:
Option Explicit

Public Sub RaumArray()
    Dim r As Variant
    
    With Application
        .Calculation = xlCalculationManual
        .DisplayAlerts = False
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    'Array mit den Raumnummern für die Raumpatchlisten
    For Each r In Array("301", "302", "303", "304")
        Call Tabelle(r)
        Call SAVEasXLSX(r)
        Call createPDF(r)
    Next
    
    With Application
        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Private Sub Tabelle(ByVal r As Variant)
    'neue Tabelle aus Tab 300 erzeugen und ans Ende stellen
    Worksheets("300").Copy After:=Sheets(Sheets.Count)
    'Tabelle umbenennen
    ActiveSheet.Name = r
    'Tabelleninhalt löschen
    Range("A2:T55").ClearContents
    With Worksheets("3.OG")
        'Haupttabelle 3.OG Raumspalte filtern
        .Range("$A$1:$T$346").AutoFilter Field:=1, Criteria1:="=" & r
        'Ergebnis kopieren zur neu erzeugten Tabelle
        .UsedRange.Copy Range("A1")
        'Filter deaktivieren
        Call .ShowAllData
    End With
    Worksheets("3.OG").Select
End Sub

Private Sub SAVEasXLSX(ByVal r As Variant)
    '
    ' SAVEasXLSX Makro
    '
    Worksheets(r).Copy
    With ActiveWorkbook
        .SaveAs Filename:= _
            "F:\Patchlisten\" & r & "_it_nw_pl_lanpatchliste.xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        .Close
    End With
    
End Sub

Private Sub createPDF(ByVal r As Variant)
    '
    ' createPDF Makro
    '
    Worksheets(r).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "F:\Patchlisten\" & r & "_it_nw_pl_lanpatchliste.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Save as XLSX und PDF
02.09.2017 19:50:33
Knauer
Sorry ich bin nicht so schnell, aber ich habe jetzt deinen Code ausprobiert und fast wie nicht anders zu erwarten - es funktioniert so, wie ich es mir geahnt habe. Es geht jetzt auch wesentlich schneller, Dank effektiven Code. Problem gelöst - vielen Dank.
Dann kann man ja zum nächsten Problem in der Pipeline übergehen. Ich hätte da noch so einige :)
Die muss ich aber erstmal aufbereiten.
Viele Grüße
Dieter
AW: Save as XLSX und PDF
02.09.2017 18:44:26
Nepumuk
Hallo Knauer,
teste mal:
Public Sub SAVEasXLSX()
    '
    ' SAVEasXLSX Makro
    '
    With Application
        .Calculation = xlCalculationManual
        .DisplayAlerts = False
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    Worksheets("301").Copy
    With ActiveWorkbook
        .SaveAs Filename:= _
            "F:\Patchlisten\301_it_nw_pl_lanpatchliste.xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        .Close
    End With
    
    Worksheets("302").Copy
    With ActiveWorkbook
        .SaveAs Filename:= _
            "F:\Patchlisten\302_it_nw_pl_lanpatchliste.xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        .Close
    End With
    
    Worksheets("303").Copy
    With ActiveWorkbook
        .SaveAs Filename:= _
            "F:\Patchlisten\303_it_nw_pl_lanpatchliste.xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        .Close
    End With
    
    Worksheets("304").Copy
    With ActiveWorkbook
        .SaveAs Filename:= _
            "F:\Patchlisten\304_it_nw_pl_lanpatchliste.xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        .Close
    End With
    
    With Application
        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    
    Call createPDF
    
End Sub

Public Sub createPDF()
    '
    ' createPDF Makro
    '
    Worksheets("301").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "F:\Patchlisten\301_it_nw_pl_lanpatchliste.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
    Worksheets("302").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "F:\Patchlisten\302_it_nw_pl_lanpatchliste.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
    Worksheets("303").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "F:\Patchlisten\303_it_nw_pl_lanpatchliste.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
    Worksheets("304").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "F:\Patchlisten\304_it_nw_pl_lanpatchliste.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Save as XLSX und PDF
02.09.2017 19:20:40
Knauer
Ja das funktioniert auch wunderbar. Danke.
Nochmal meine Frage zur Übergabe der Arraywerte für jede Aktion. Dafür müsste jede Raumnr. jeweils 2 mal in Sheets("301").Select und im Dateinamen übergeben werden. Dann wäre auch der Code sehr übersichtlich. Das scheint mir eine zentrale Funktionsweise zu sein, die man immer wieder braucht. Vermute ich mal.
Ich sehe nur diese Wiederholungen und das schaut doch nach einer Schleifenlösung aus?
AW: Save as XLSX und PDF
02.09.2017 19:22:42
onur
Ja sicher, du kannst nicht alle Dateien gleichzeitig speichern.
AW: Save as XLSX und PDF
02.09.2017 19:56:08
Knauer
Der Code von Nepomuk hat das Problem elegant gelöst, direkt in der Schleife. Auch Dir vielen Dank.
Anzeige

16 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige