Thema Datum  Von Nutzer Rating
Antwort
31.01.2008 14:24:18 Tom
NotSolved
31.01.2008 15:56:30 Holger
NotSolved
31.01.2008 16:42:17 Tom
NotSolved
Blau Aw:Aw:Aw:Fehlermeldung bei Druck unterdrücken
31.01.2008 19:43:38 Holger
NotSolved
01.02.2008 11:33:13 Tom
NotSolved
01.02.2008 12:00:17 Holger
NotSolved
01.02.2008 12:23:31 Tom
NotSolved
01.02.2008 14:35:44 Tom
NotSolved

Ansicht des Beitrags:
Von:
Holger
Datum:
31.01.2008 19:43:38
Views:
2208
Rating: Antwort:
  Ja
Thema:
Aw:Aw:Aw:Fehlermeldung bei Druck unterdrücken
Hallo Tom,
man muss genau aufpassen, was ins Klassenmodul und was in ein normales Modul gehört.

Klassenmodul:

' initialisiere das Anwendungsobjekt(?)
Public WithEvents App As Word.Application
' globale Variablen, die vor/nach dem Druck geändert werden sollen
Dim savEnvAlert As WdAlertLevel
Dim savEnvBackground As Boolean

' vor dem Druck
Sub myPrintControl_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
' speichere Einstellungen
savEnvAlert = Application.DisplayAlerts
savEnvBackground = Options.PrintBackground

' setze gewünschte Einstellungen
Application.DisplayAlerts = wdAlertsNone
Options.PrintBackground = False

' Druck soll nicht gecancelled werden
Cancel = False
End Sub

' nach dem Druck
Sub myPrintControl_DocumentAfterPrint()
' Einstellungen wiederherstellen
Application.DisplayAlerts = savEnvAlert
Options.PrintBackground = savEnvBackground
End Sub

'normales Modul:

' Instanz meiner Klasse erzeugen
Dim myPrintControl As New PrintControl

' Zuweisen des Event Handlers an das Anwendungsobjekt meiner Klasse
Sub Register_Event_Handler()
Set myPrintControl.App = Word.Application
End Sub

Die Sub Register_Event_Handler() musst du einmal laufen lassen.

Vielleicht legst du dir noch eine weitere Ereignisroutine für Testzwecke ins Klassenmodul, die leichter zu prüfen ist, die beim Schließen eines Dokumentes angestoßen wird. Vergiss nicht, sie wieder zu löschen:

Private Sub app_Quit()
Stop
End Sub




Tom schrieb am 31.01.2008 16:42:17:

Hallo Holger,

Vielen Dank für Deine Antwort. Ich habs jetz in ein Klassenmodul verschoben, leider funktioniert es noch immer nicht.
Im Klassenmodul "PrintControl" in der normal.dot steht jetzt folgendes:
---
' initialisiere das Anwendungsobjekt(?)
Public WithEvents App As Word.Application

' globale Variablen, die vor/nach dem Druck geändert werden sollen
Dim savEnvAlert As WdAlertLevel
Dim savEnvBackground As Boolean

' Instanz meiner Klasse erzeugen
Dim myPrintControl As New PrintControl

' Zuweisen des Event Handlers an das Anwendungsobjekt meiner Klasse
Sub Register_Event_Handler()
Set myPrintControl.App = Word.Application
End Sub

' vor dem Druck
Sub myPrintControl_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
' speichere Einstellungen
savEnvAlert = Application.DisplayAlerts
savEnvBackground = Options.PrintBackground

' setze gewünschte Einstellungen
Application.DisplayAlerts = wdAlertsNone
Options.PrintBackground = False

' Druck soll nicht gecancelled werden
Cancel = False
End Sub

' nach dem Druck
Sub myPrintControl_DocumentAfterPrint()
' Einstellungen wiederherstellen
Application.DisplayAlerts = savEnvAlert
Options.PrintBackground = savEnvBackground
End Sub
---

Wenn ich Breakpoints setze, wird keine einzige Funktion jemals aufgerufen. Ich weiss leider nicht, ob sich solche Klassenevents überhaupt breaken lassen.
Gibt es vielleicht eine Sicherheitseinstellung, die die Ausführung der Makros verhindert? (Es erscheint aber keine Meldung dass Makros deaktiviert wären)

Bitte nochmals um Hilfe

Grüsse

Tom


Holger schrieb am 31.01.2008 15:56:30:

Hallo Tom,
die Deklaration erfolgt nicht in "This Document", sondern du musst ein Klassenmodule anlegen (Meuü Einfügen). Wahrscheinlich heißt es "Klasse1" u.ä.
Kopiere deine Deklarationen und Prozeduren ins Klassenmodul.
Initialisiere die Ereignisprozeduren z.B. mit folgendem Code in einem Modul
Dim MEreig As New Klasse1
Sub Ereignisstarter()
Set MEreig.appWord = Word.Application
End Sub
Dann reagiert Word auf die Ereignisse. Diese habe ich allerdings nicht getestet.
Siehe auch in der VBA-Hilfe unter "Ereignisse des Application-Objekts" und klicke dort auf "Verwendung von Ereignissen mit dem Application-Objekt".
Viel Erfolg
Holger


Tom schrieb am 31.01.2008 14:24:18:

Hallo,

Ich habe folgendes Problem:
Ein automatisierter Dienst auf einem Server soll ein Worddokument aus einer Datenbank lesen, und per Druckaufruf an einen PDF Konverter in ein PDF umgewandelt werden.
Leider ist es so, das einige der Dokumente ungültige Seitenränder haben. Das hat zur Folge, dass auf dem Server Word gestartet wird, der Druckvorgang beginnt und dann die Meldung "Seitenränder ausserhalb des bedruckbaren Bereichs, Fortsetzen Ja/Nein" erscheint. Serverseitig kann aber natürlich niemand diese Meldung wegklicken, die Anwendung steht.

Aufgrund meiner Recherche hab ich mir das folgende zusammengebastelt und in normal.dot, Microsoft Word Objects, ThisDocument hinterlegt (es soll ja für ALLE Dokumente gelten).

Public WithEvents appWord As Word.Application
Dim savEnvAlert As WdAlertLevel
Dim savEnvBackground As Boolean

Private Sub appWord_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)

Dim intResponse As Integer

savEnvAlert = Application.DisplayAlerts
savEnvBackground = Options.PrintBackground
Application.DisplayAlerts = wdAlertsNone
Options.PrintBackground = False

Cancel = False
End Sub

Private Sub appWord_DocumentAfterPrint()
Application.DisplayAlerts = savEnvAlert
Options.PrintBackground = savEnvBackground
End Sub

Leider funktioniert es nicht, die Anwendung gelangt weder in das eine noch in das andere Event.
Ich sags gleich dazu, ich habe von VBA Null Ahnung, ich entwickle in C#/ASPX.

Wäre für jede Hilfe dankbar!!

Schöne Grüsse

Tom

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
31.01.2008 14:24:18 Tom
NotSolved
31.01.2008 15:56:30 Holger
NotSolved
31.01.2008 16:42:17 Tom
NotSolved
Blau Aw:Aw:Aw:Fehlermeldung bei Druck unterdrücken
31.01.2008 19:43:38 Holger
NotSolved
01.02.2008 11:33:13 Tom
NotSolved
01.02.2008 12:00:17 Holger
NotSolved
01.02.2008 12:23:31 Tom
NotSolved
01.02.2008 14:35:44 Tom
NotSolved