Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Drucken verhindern ABER pdf erstellen erlauben
#41
(22.02.2016, 19:17)Steffl schrieb: Hallo,

stimmt, das habe ich übersehen  :22:  Dreh aber trotzdem mal die Parameter um, weil der Type ist der erforderliche und Filename der optionale.



Hallo und guten Morgen,


gesagt, getan ... aber leder bleibt es bei dem Fehler. :22:

Christian
Antworten Top
#42
(22.02.2016, 19:17)atilla schrieb: Hallo Stefan,

Christian schreibt aber, dass es funktioniert, wenn er BeforPrint raus nimmt.


Christian,

teste mal mit Applcation.Wait in der BeforePrint Prozedur:


Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
' Verhindert das Drucken
Application.Wait (Time + TimeValue("00:00:01"))
If boVar = False Then

Cancel = True
MsgBox "Drucken aus der Excel wurde verhindert." _
    & vbCr & "" _
    & vbCr & "Drucken nur als .pdf möglich." _
    & vbCr & "" _
    & vbCr & "Datei bitte als .pdf im Projekteordner abspeichern.", 48
End If
End Sub



Kann mir zwar nicht vorstellen, dass es geh, aber trotzdem mal testen.
Sonst kann es so sein, wie Du schreibst, dass es am Netzwerk Probleme macht. Teste auch mal  mit einem Lokalen Ort.


Auch hier einen guren Morgen,
dies habe ich auch gerade getestet.
Die Welt steht für eine Sekunde und denn ... denn der bekannte Fehlere :22:
Antworten Top
#43
Leider habe ich keinen Drucker den ich direkt bei mir Anschließen kann.
Ich sitze direkt im Netzwerk.

---
Wenn ich "BeforePrint" ganz aus raus nehme kommt keine Fehlermeldung, allerdings wird denn auch das Drucken nicht verhindert.
Und da nach meinem Verständnis eine pdf über den pdf-Drucker erstellt wird, aber gleichzeitig das Drucken verboten wird kommt es zu einem Konflikt.

Vielleicht geht es ja einfach nicht und ich muss mir eine Alternative überlegen.
Die Welt wird davon nicht untergehen. :15:
Antworten Top
#44
Idee ?!.

wie währe es wenn man dies über eine Variable abfängt.

direkt vor dem erstellen der Backup pdf eine Variable setzen, direkt nach dem erstellen diese wieder zurück setzen.


in BeforePrint diese abfragen und je nach inhalt weiter verfahren, also drucken oder das drucken verhindern.

Aber vorher müsste diese Variable defeniert werden.

Müsste es nicht darüber klappen? oder gibt es da einen Denkfehler?
Antworten Top
#45
Hallo Christian,


die Idee kommt leider zu spät :19: 

Das ist genau das, was ich von Anfang an hier eingestellt habe. Das ist die Variable boVar im Code.
Die wird Prozedur übergreifend definiert und belegt.


Beim Speichern erhält sie den Wert True.
Im BeforePrint wird bei True "gecancelt".

Auf diese weise funktioniert es bei mir einwandfrei.
Gruß Atilla
Antworten Top
#46
(23.02.2016, 10:35)atilla schrieb: Hallo Christian,


die Idee kommt leider zu spät :19: 

Das ist genau das, was ich von Anfang an hier eingestellt habe. Das ist die Variable boVar im Code.
Die wird Prozedur übergreifend definiert und belegt.


Beim Speichern erhält sie den Wert True.
Im BeforePrint wird bei True "gecancelt".

Auf diese weise funktioniert es bei mir einwandfrei.

;)
ja habe mir gerade den Code genauer angeschaut, und dachte mir gerade genau dies, mit boVar ...
Man sieht ich sitze sehr selten vor VBA.



Frage:
Da es ja bei Euch läuft und bei mir nicht, kann es daran liegen das ich es als "Vorlage mit Makro" abspeichere? ... hoffe mal das nun keine Steine geflogen kommen ;)
Antworten Top
#47
Für die Übersicht:
Code:
Arbeitsmappe:
'Übergreifende Variable
'-----------------------
Dim boVar As Boolean

Private Sub Workbook_Open()
'öffnet das Makro "Autostart"
'-----------------------------
    ' Druckbereich festlegen
    ' Zellen leeren
    ' Sichtbereich auf dem Monitor bestimmen
    ' Springe in Zelle E20
Call autostart

 End Sub


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("AY109").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

' Backup pdf erzeugen
'-----------------------
   Call ExportPDF

    Cancel = True

End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)

' Verhindert das Drucken
'-----------------------
If boVar = False Then

   Cancel = True

   MsgBox "Drucken aus der Excel wurde verhindert." _
       & vbCr & "" _
       & vbCr & "Drucken nur als .pdf möglich." _
       & vbCr & "" _
       & vbCr & "Datei bitte als .pdf im Projekteordner abspeichern.", 48
End If

End Sub
Code:
Sub autostart()

' Druckbereich festlegen
   ActiveSheet.PageSetup.PrintArea = "$C$1:$AF$99"


' Zellen leeren
   Range("D103:D103").ClearContents
   
' Sichtbereich auf dem Monitor bestimmen
   Columns("A:AF").Select
   Range("AF1").Activate
   ActiveWindow.Zoom = True
   
   
       
' Springe in Zelle E20
   Range("O3").Select


End Sub
   
Code:
Sub ExportPDF()

boVar = True

' Druckbereich festlegen
'-----------------------
   ActiveSheet.PageSetup.PrintArea = "$C$1:$AF$99"


'Archiv-pdf erstellen
'---------------------
Dim pdfName As String
   ActiveSheet.PageSetup.PrintArea = "$C$1:$AF$99"
   pdfName = "C:\1x\2xx\3xxx\" & Range("o6") & "_" & Range("o3") & "_" & Format(Now, "YYYY_MM_DD-hh_mm_ss") & ".pdf"
   ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfName
boVar = False

End Sub
Antworten Top
#48
Habe gerade ein STOPP bei "If boVar = False Then" in Bevor Print gesetzt im mir boVar anzuschauen.

boVar ist Leer
Antworten Top
#49
so, gerade noch einmal etwas genauer nach boVar geschaut.

ich habe

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

boVar = False
umd boVar einen genauen Zustand zu geben.
und da auch ein Stopp eingestzt und den Inhalt von boVar verfolgt.

Das Programm durchläuft "BeforeSave" springt in die Exportpdf und in dem Moment in dem das Programm in "BevorePrint" springt verliert beVor den Inhalt und ist Leer.
Antworten Top
#50
Hallo Christian,

kann es sein, dass Du nie den gesamten von uns eingestellten Code bei Dir übernommen hast?


Ich sehe diese Zeile nicht:

Dim boVar As Boolean


Die muss außerhalb der Prozedur als erste Zeile im Codefenster wenn Option Explicit verwendet, dann darunter.

Bei Andres Variante ist sie im allgeminen Modul bei meiner im Cpdefenster DiseArbeitsmappe zu finden.


Ich habe jetzt auch als Vorlage (Template) getestet und es funktioniert genauso.


Du hattest noch geschrieben, dass beim Speichern nur ein PDf erzeugt werden soll, und die Datei selber am besten gar nicht gespeichert werden sollte.
Das geht auch, wenn Du als letzte Zeile im BeforeSave folgendes schreibst:

Cancel =True


Auf jeden Fall, da es hier eine Vorlage ist, solltest Du Änderungen am Code einmal abspeichern.
Gruß Atilla
Antworten Top


Gehe zu:


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