Drucken verhindern ABER pdf erstellen erlauben
#1
Hallo zusammen,
Hallo,

ich bin dabei eine .xltm Datei zu erstellen, in der das Drucken verhindert werden muss aber das automatische Erstellen einer .pdf funktionieren muss.
Alle anderen Probleme konnte ich lösen, hier scheitere ich nun aber leider.

Was passiert bei diesem Code?
- Wenn in dem Feld AX110 eine "0" steht wird das Drucken und Speicher erfolgreich verhindert
- Wenn in dem Feld AX110 eine "1" steht wird das Drucken erfolgreich verhindert, beim Speichern kommt allerdings eine Fehlermeldung.

Fehler:
- die MsgBox aus "Private Sub Workbook_BeforePrint(Cancel As Boolean)" wird aufgerufen, was ja auch ganz logisch ist. im Anschluss kommt ein Laufzeitfehler mit dem Verweis auf den Pfad.


Also mir ist klar das diese Meldung kommen muss, da das erstellen der pdf über den Druckertreiber läuft.
Kann man den Code aber so gestallten, dass das Drucken weiterhin verhindert wird ABER das Speicher als Excel und pdf erlaubt?


Danke




Mein bisheriger Code in "Dieser Arbeitsmappe"


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Prüfen ob alle notwendigen Felder ausgefüllt sind, erst wenn diese ausgefüllt sind wird die Datei zum Drucken/Speichern freigegeben
 If ActiveSheet.Range("AX110").Value = "0" Then
 
  MsgBox "      Die Datei wurde nicht vollständig ausgefüllt.:" _
    & vbCr & "" _
    & vbCr & " Seite 1: Es müssen alle Felder ausgefüllt sein" _
    & vbCr & " Seite 2: Wurde ein Feld ausgewählt muss in dieser Zeile auch die Checkliste ausgefüllt werden und umgekehrt." _
    & vbCr & "" _
    & vbCr & "" _
    & vbCr & "   Bitte alle Felder ausfüllen." _
    & vbCr & "" _
    & vbCr & "   Ansonsten kann nicht gedruckt werden." _
    & vbCr & "" _
    & vbCr & "                          Gruß", 48
Cancel = True
Exit Sub
End If
' Druckbereich festlegen
    ActiveSheet.PageSetup.PrintArea = "$B$1:$AE$97"

'Archiv-pdf erstellen
Dim pdfName As String
pdfName = "xxx" & Range("K8") & "_" & Range("K6") & "_" & Range("K9") & "_" & Range("K13") & "_" & Format(Now, "YYYY_MM_DD-hh_mm_ss") & ".pdf"
    ActiveWorkbook.ExportAsFixedFormat Filename:=pdfName, Type:=xlTypePDF
   
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
' Verhindert das Drucken
Cancel = True
MsgBox "Drucken aus der Excel wurdeverhindert." _
    & vbCr & "" _
    & vbCr & "Drucken nur als .pdf möglich." _
    & vbCr & "" _
    & vbCr & "Datei bitte als .pdf im Projekteordner abspeichern.", 48
   
End Sub
Top
#2
Hallo,

IMHO fehlt vor den Range jeweils das Sheet

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   Dim pdfName As String
  
   With ActiveSheet
      
      'Prüfen ob alle notwendigen Felder ausgefüllt sind, erst wenn diese ausgefüllt sind wird die Datei zum Drucken/Speichern freigegeben
       If .Range("AX110").Value = "0" Then
      
        MsgBox "      Die Datei wurde nicht vollständig ausgefüllt.:" _
          & vbCr & "" _
          & vbCr & " Seite 1: Es müssen alle Felder ausgefüllt sein" _
          & vbCr & " Seite 2: Wurde ein Feld ausgewählt muss in dieser Zeile auch die Checkliste ausgefüllt werden und umgekehrt." _
          & vbCr & "" _
          & vbCr & "" _
          & vbCr & "   Bitte alle Felder ausfüllen." _
          & vbCr & "" _
          & vbCr & "   Ansonsten kann nicht gedruckt werden." _
          & vbCr & "" _
          & vbCr & "                          Gruß", 48
      Cancel = True
      Exit Sub
      End If
      ' Druckbereich festlegen
          .PageSetup.PrintArea = "$B$1:$AE$97"
      
      'Archiv-pdf erstellen
      pdfName = "xxx" & .Range("K8") & "_" & .Range("K6") & "_" & .Range("K9") & "_" & .Range("K13") & "_" & Format(Now, "YYYY_MM_DD-hh_mm_ss") & ".pdf"
          ActiveWorkbook.ExportAsFixedFormat Filename:=pdfName, Type:=xlTypePDF
   End With
End Sub

PS: Wenn der Fehler auftaucht, welchen Inhalt hat die Variable pdfName?
Gruß Stefan
Win 10 / Office 2016
Top
#3
Hallöchen,

ich vermute, dass in einer der angegebenen Zellen ein Zeichen steht, das nicht für einen Dateinamen geeignet ist.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
Hallo,

eine Möglichkeit ist eine öffentliche boolesche Variable außerhalb der Prozedur einzusetzen.

z.B. so:


Code:
Option Explicit
Dim boVar As Boolean
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Prüfen ob alle notwendigen Felder ausgefüllt sind, erst wenn diese ausgefüllt sind wird die Datei zum Drucken/Speichern freigegeben
If ActiveSheet.Range("a1").Value = "0" Then

 MsgBox "      Die Datei wurde nicht vollständig ausgefüllt.:" _
   & vbCr & "" _
   & vbCr & " Seite 1: Es müssen alle Felder ausgefüllt sein" _
   & vbCr & " Seite 2: Wurde ein Feld ausgewählt muss in dieser Zeile auch die Checkliste ausgefüllt werden und umgekehrt." _
   & vbCr & "" _
   & vbCr & "" _
   & vbCr & "   Bitte alle Felder ausfüllen." _
   & vbCr & "" _
   & vbCr & "   Ansonsten kann nicht gedruckt werden." _
   & vbCr & "" _
   & vbCr & "                          Gruß", 48
Cancel = True
Exit Sub
End If
boVar = True
' Druckbereich festlegen
   ActiveSheet.PageSetup.PrintArea = "$B$1:$AE$97"

'Archiv-pdf erstellen
Dim pdfName As String
pdfName = "xxx" & Range("K8") & "_" & Range("K6") & "_" & Range("K9") & "_" & Range("K13") & "_" & Format(Now, "YYYY_MM_DD-hh_mm_ss") & ".pdf"
   ActiveWorkbook.ExportAsFixedFormat Filename:=pdfName, Type:=xlTypePDF
boVar = False
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
' Verhindert das Drucken
If boVar = False Then
 Cancel = True
 MsgBox "Drucken aus der Excel wurdeverhindert." _
     & vbCr & "" _
     & vbCr & "Drucken nur als .pdf möglich." _
     & vbCr & "" _
     & vbCr & "Datei bitte als .pdf im Projekteordner abspeichern.", 48
 End If
End Sub
Gruß Atilla
Top
#5
Hallo Atilla,

ich bin immer noch von falschen Zeichen überzeugt Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#6
Hallo Andre,

ich von meiner Variante   :21:
Gruß Atilla
Top
#7
Hallo Atilla,

Die Fehlerbeschreibung lautete:
"im Anschluss kommt ein Laufzeitfehler mit dem Verweis auf den Pfad."
Da vermute ich nun erst einmal, dass die Zeilen mit der pdf-Ausgabe nicht stimmen. Wobei mit der dargestellten Syntax kein Pfad angegeben ist, sondern lediglich ein Dateiname. Ein Pfad beginnt nun mal nicht mit "xxx" ...

Na, schauen wir mal, was der TE dazu meint.

Ergänzung meiner Vermutung:
Bei der Dateiangabe könnte neben ungültigen Zeichen auch noch die Zeichenzahl eine Rolle spielen sowie eventuell fehlende Schreibrechte im Ordner.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#8
... und als Ergänzung: der User muss am Speicherort auch Schreibrechte haben. Beispiel: C:\ wird mit hoher Sicherheit angemeckert!
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#9
Hallo Günter,

hatte ich im Prinzip auch:
Zitat:sowie eventuell fehlende Schreibrechte im Ordner
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#10
Hallo und Danke für die vielen Antworten,

ich werde mir diese gleich in Ruhe durchlesen und eine nach der anderen Probieren und versuchen zu kommentieren.

@pdfName: dieser Teil ist meiner Meinung nach oK, da wenn ich den Teil mit dem "Private Sub Workbook_BeforePrint(Cancel As Boolean)" lösche er mir die pdf an den gewünscht Ort, mit dem gewünschten Namen erstellt.


Gruß
Christian19
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste