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

2 Makros zum speichern und drucken mit Vorgaben

2 Makros zum speichern und drucken mit Vorgaben
08.08.2023 14:25:46
aXCell
Hallo zusammen,

ich bin noch echt unerfahren, was VBA und Makros angeht, daher scheitere ich wahrscheinlich an Kleinigkeiten.
Ich mache meine Stundenzettel digital und möchte diese gerne beim klick auf "speichern" mit einigen Vorgaben aus dem Arbeitsblatt in enem bestimmten Dateinamen Format ablegen und zusätzlich für die Buchhaltung in dem gleichen Dateinamenformat, allerdings als PDF zur Verfügung stellen.

Bisher habe ich alles nur per Try and Error mit Copy und paste zusammenge"schustert"

Das Makro auf dem Textfeld "speichern" sieht folgendermaßen aus:

Sub Speichern_unter()
Dim Datei As String
Dim Verzeichnis As String
Dim SaveDummy As Variant
Verzeichnis = "C:\Users\arohrmann\Documents\1. Stundenzettel\" 'Verzeichnis-Vorschlag
Datei = Range("G2") & "" & Range("H2") & " - " & Range("D11") & " - " & Range("D7") & ", " & Range("D9") & ".xlsm" 'Datei-Vorschlag
SaveDummy = SpeichernUnter(Verzeichnis & Datei)
If SaveDummy > False Then ActiveWorkbook.SaveAs SaveDummy, FileFormat:=51 'Es wurde im Dialog auf Speichern gedrückt
End Sub
Function SpeichernUnter(VorgabeName As String) As Variant
SpeichernUnter = Application.GetSaveAsFilename(InitialFileName:=VorgabeName, _
Filefilter:="Excel Dateien (*.xlsx),*.xlsx", _
FilterIndex:=1, Title:="Speichern unter...", ButtonText:="speichern")
End Function


Das Makro hinter dem Textfeld "Drucken" sieht so aus:

Sub DruckenInPDF()
Call PDF_Speichern
End Sub

Function PDF_Speichern() As Boolean ' Kopiert Blätter in eine neue PDF-Datei für den E-Mail-Versand
Dim DiesesBlatt As String, DieseDatei As String, PfadName As String
Dim SpeichernAls As String

Application.ScreenUpdating = False

' Dateinamen zum Speichern abrufen
DiesesBlatt = ActiveSheet.Name
DieseDatei = ActiveWorkbook.Name
PfadName = ActiveWorkbook.Path
SpeichernAls = PfadName & "\" & DiesesBlatt & ".pdf"

'Druckqualität einstellen
On Error Resume Next
ActiveSheet.PageSetup.PrintQuality = 600
Err.Clear
On Error GoTo 0

' Benutzer anweisen, wie er senden soll
On Error GoTo RefLibFehler
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=SpeichernAls, Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=True
On Error GoTo 0

NurSpeichern:
MsgBox "Eine Kopie dieses Blattes wurde erfolgreich als .pdf-Datei gespeichert: " & vbCrLf & vbCrLf & SpeichernAls & _
"Überprüfen Sie das .pdf-Dokument. Wenn das Dokument NICHT gut aussieht, passen Sie Ihre Druckparameter an und versuchen Sie es erneut."

PDF_Speichern = True
GoTo EndMacro

RefLibFehler:
MsgBox "Kann nicht als PDF gespeichert werden. Referenzbibliothek nicht gefunden."
PDF_Speichern = False
EndMacro:
End Function

Beim erstellen der PDF möchte ich aber gerne das gleiche Format für den Dateinamen aus der Tabelle nutzen, wie beim normalen speichern auch.

Beim Makro "speichern" bekomme ich Fehler 400 und die Datei wird nicht gespeichert, er meckert über das Makro, das ja als xlsm gespeichert werden soll, aber die Vorgabe der Dateieerweiterung ist doch integriert?
Beim Makro "Drucken" haut er einfach die PDF mit Standard Dateinamen raus, das speichern als solches funktioniert, aber wo baue ich die Dateinamen vorgabe ein? (und der blöde Hinweis, dass es gespeichert wurde nervt auch etwas)

P.S. Die code > Tags scheinen irgendwie nicht zu funktionieren, ich markiere den Code, klicke auf den Button über dem Beitragsfeld, aber es passiert nichts. .

Vielen Dank für eure Hilfe und Grüße aus Flensburg, Alex

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Makros zum speichern und drucken mit Vorgaben
08.08.2023 23:43:35
ralf_b
Willst du die Mappe mit dem Code ohne Code speichern?
So ein Stundenzettel ist doch nur ein Arbeitsblatt und nicht die ganze Datei oder ?
Beim Pdf wird nur das Blatt exportiert. Du könntest auch nur das entsprechende Blatt als neue Datei ".xlsx" speichern.
Da du schreibst das beide Dateien xlsx und pdf den gleichen Dateinamen haben sollen. Warum erstellst du den Namen zweimal?
Ich würde dazu raten beide Speichervorgänge zusammenzufassen. Damit wird sichergestellt das du auch beide Dateien erstellt werden und nicht, aus Versehen, einmal ein Button vergessen wird.

schau mal hier https://www.herber.de/forum/archiv/1504to1508/1504655_Vba_speichern_ohne_Makros.html
dort wird der Ordnerauswahldialog verwendet.

hier mal ein Versuch der Umsetzung. ungetestet

Option Explicit



Function getFolder(VorgabeName As String)

Dim strOrdner As String
With Application.FileDialog(msoFileDialogFolderPicker) '--- Ordner wählen
.InitialFileName = VorgabeName
.Title = "Ordnerauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
If Right(.SelectedItems(1), 1) > "\" Then
getFolder = .SelectedItems(1) & "\"
Else
getFolder = .SelectedItems(1)
End If
Else
getFolder = ""
End If
End With

End Function


Sub Drucken()

Dim sDatei$, sVerzeichnis$
sVerzeichnis = getFolder("C:\Users\arohrmann\Documents\1. Stundenzettel\") 'Verzeichnis-Vorschlag
sDatei = Range("G2") & "" & _
Range("H2") & " - " & _
Range("D11") & " - " & _
Range("D7") & ", " & _
Range("D9") & ".xlsx" 'Datei-Vorschlag

Call xlsx_Speichern(sVerzeichnis, sDatei)

If PDF_Speichern(sVerzeichnis, sDatei) =true Then
MsgBox "Eine Kopie dieses Blattes wurde erfolgreich als .pdf-Datei gespeichert: " & vbCrLf & vbCrLf & Verzeichnis & Datei & _
"Überprüfen Sie das .pdf-Dokument. Wenn das Dokument NICHT gut aussieht, passen Sie Ihre Druckparameter an und versuchen Sie es erneut."
Else
MsgBox "Fehler bei pdf Erstellung. Datei prüfen"
End If
End Sub

Function PDF_Speichern(Verzeichnis As String, Datei As String) As Boolean ' Kopiert Blätter in eine neue PDF-Datei für den E-Mail-Versand
PDF_Speichern = True

Application.ScreenUpdating = False
'Druckqualität einstellen
On Local Error Resume Next
ActiveSheet.PageSetup.PrintQuality = 600
Err.Clear
On Error GoTo 0

On Local Error Resume Next
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Verzeichnis & Datei, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
If Err > 0 Then
PDF_Speichern = False
Err.Clear
On Error GoTo 0
End If
End Function


Sub xlsx_Speichern(Verzeichnis As String, Datei As String)
Application.DisplayAlerts = False
ActiveSheet.SaveAs Filename:=Verzeichnis & Datei, FileFormat:=51 'Es wurde im Dialog auf Speichern gedrückt
Application.DisplayAlerts = True
End Sub
Anzeige
2 Makros zum speichern und drucken mit Vorgaben
09.08.2023 12:05:58
aXCell
  • Willst du die Mappe mit dem Code ohne Code speichern?

  • Ich würde die Mappe gerne inklusive dem Makro speichern, da ich das dann auch meinen Kollegen zur Verfügung stellen möchte, um so eine einheitliche Dateinamensvergabe mit dem Büro etablieren könnte.

  • So ein Stundenzettel ist doch nur ein Arbeitsblatt und nicht die ganze Datei oder ?

  • Der Stundenzettel ist tatsächlich eine Datei, eine Arbeitsmappe, bestehend aus nur einer Tabelle.
    Ich führe sie quasi als "Template" wenn man das so sagen kann, als Vorlage, die ich mit den entsrechenden Daten befülle und aus der ich dann pro Kunde / Tag / Baustelle immer eine separate Datei erstelle mit entsprechend zugeordnetem Dateinamen (siehe Vorgabe).

  • Beim Pdf wird nur das Blatt exportiert. Du könntest auch nur das entsprechende Blatt als neue Datei ".xlsx" speichern.

  • Das neue Blatt als .xlsx beinhaltet dann aber nicht das Makro, korrekt?

  • Da du schreibst das beide Dateien xlsx und pdf den gleichen Dateinamen haben sollen. Warum erstellst du den Namen zweimal?

  • Die "Rohdatei" .xlsx/.xlsm schreibe und verändere ich im Laufe der Woche, Anpassungen von Stunden und / oder Material usw., auch im nachhinein noch innerhalb der Arbeitswoche. Das PDF erstelle ich am Ende der Woche von jeder Kunden spezifischen Datei, um sie dann in PDF Form an unsere Buchhaltung zu übergeben / zu senden.

  • Ich würde dazu raten beide Speichervorgänge zusammenzufassen. Damit wird sichergestellt das du auch beide Dateien erstellt werden und nicht, aus Versehen, einmal ein Button vergessen wird.

  • Kann man sicher machen, wenn dann die entsprechenden Ursprungsdateien überschrieben werden, was ja logischerweise dann auch passiert.

    Dein Code funktioniert leider nicht, da er beim speichern meckert, "Variable nicht definiert" mit hinweis auf das Wort "Verzeichnis"im Absatz "Sub Drucken()":
    If PDF_Speichern(sVerzeichnis, sDatei) = True Then
    
    MsgBox "Eine Kopie dieses Blattes wurde erfolgreich als .pdf-Datei gespeichert: " & vbCrLf & vbCrLf & Verzeichnis & Datei & _
    "Überprüfen Sie das .pdf-Dokument. Wenn das Dokument NICHT gut aussieht, passen Sie Ihre Druckparameter an und versuchen Sie es erneut."
    Else
    Anzeige
    2 Makros zum speichern und drucken mit Vorgaben
    09.08.2023 13:16:54
    Pierre
    Hi, nur zu deiner letzten Frage:

    "sVerzeichnis" dürfte richtig sein, sprich, das "s" voran fehlt dort, wo der Fehler auftritt.
    2 Makros zum speichern und drucken mit Vorgaben
    09.08.2023 13:34:36
    aXCell
    Danke Pierre, das war es, es fehlte auch ein "s" vor Datei.
    Das speichern als .xlsx & .pdf funktioniert, soweit also schon mal richtig geil,

    Danke an alle Beteiligten, aber:

    Der Dateiname der PDF beinhaltet auch noch zusätzlich das .xlsx (Mein Monk spielt da nur etwas verrückt, ist nicht entscheidend)
    Wo im Code wird das denn definiert? Reicht es da irgendwo eine Vorgabe zu entfernen oder ist das umsändlicher?

    Userbild
    Anzeige
    2 Makros zum speichern und drucken mit Vorgaben
    09.08.2023 14:00:01
    Pierre
    Hier:
        sDatei = Range("G2") & "" & _
    
    Range("H2") & " - " & _
    Range("D11") & " - " & _
    Range("D7") & ", " & _
    Range("D9") & ".xlsx" 'Datei-Vorschlag


    wird jedenfalls das .xlsx mit angegeben.

    Versuch mal, alles hinter "("D9") zu löschen, ob es dann korrekt ist.

    308 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige