[VBA] PDF maken bij afsluiten document / sheet / etc *

Pagina: 1
Acties:
  • 487 views sinds 30-01-2008
  • Reageer

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 23:44
Ik ben begonnen met dit topic: PDF maken vanuit Word, Excel, AutoCAD...

Kort samengevat wil ik dus OF een knop in een aantal programma's hebben zoals Word, Excel en AutoCAD waarmee een PDF gemaakt wordt met dezelfde naam en in dezelfde directory als het te converteren bestand OF ik wil dat hetzelfde gebeurd wanneer een bestand wordt afgesloten en dan evt. met een pop-up van "Wilt u het bestand opslaan als PDF?".

Ik ben nu tot hier gekomen:
Een Macro opgenomen in Word en daar een leuk knopje van gemaakt en opgeslagen in een .dot bestand.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Sub qvPDF()
'
' qvPDF Macro
' Macro opgenomen op 19-9-2006 door Floris
'
    ActivePrinter = "qvPDF"
    Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
        wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
        False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0
End Sub


Wat er gebeurt wanneer men op het macro-knopje klikt is vrij simpel; het huidige bestand wordt afgedrukt naar een virtuele printer. Hiervoor gebruik ik qvPDF (met Ghostscript 8.54). Het enige wat men dan nog moet doen is het pad opgeven. Hij gaat nu namelijk naar de directory waar je voor het laatst een bestand hebt opgeslagen. Dat wil ik dus niet, ik wil dat er automatisch in dezelfde directory opgeslagen wordt, maar dat kan qvPDF niet.

Nu heb ik ook PDFCreator geinstalleerd, deze heeft een COM interface en is op die manier volledig aan te sturen. Ik denk nu dus dat ik het beste dat kan gaan proberen.

Echter vraag ik mij af, is het uberhaupt mogelijk om een programma als Word dusdanig aan te passen dat er een stukje code aangeroepen wordt bij het afsluiten van een bestand?

En zijn er mensen die iets dergelijks al eens eerder hebben gemaakt die mij op weg kunnen helpen? :)

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:53

Creepy

Tactical Espionage Splatterer

Vast wel :) Maar de Office experts zitten waarschijnlijk eerder in Officesuites en -software :)
Move -> Officesuites en -software

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Boss
  • Registratie: September 1999
  • Laatst online: 20:24

Boss

+1 Overgewaardeerd

In je normal.dot kan je code opnemen bij Private Sub Document_Close(). Daarin kan je nog wat leuks doen als het document wordt afgesloten.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 23:44
Creepy schreef op dinsdag 19 september 2006 @ 10:49:
Vast wel :) Maar de Office experts zitten waarschijnlijk eerder in Officesuites en -software :)
Move -> Officesuites en -software
alweer? Afbeeldingslocatie: http://images.fok.nl/s/emo.gif

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Zie boven vwb afsluiten.

De directory keuze zal ingebakken zitten in qvPDF zelf en dat kan je dus niet zomaar manipuleren via VBA. Je zou kunnen kijken of dat ding op een of andere manier parameters accepteert, maar dat zou me verbazen. Kijk anders waar (regkey?) de laatstgebruikte dir wordt genoemd en verander die dan hard. Al is het register aanpassen dan weer iets dat niet zomaar gaat in VBA dus dan heb je nog een horde te nemen :P
Edit:
offtopic:
Inderdaad, doe het dan ook gewoon meteen op de juiste plaats :+

[ Voor 22% gewijzigd door F_J_K op 19-09-2006 11:26 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 23:44
Boss schreef op dinsdag 19 september 2006 @ 11:04:
In je normal.dot kan je code opnemen bij Private Sub Document_Close(). Daarin kan je nog wat leuks doen als het document wordt afgesloten.
En hoe roep je die aan dan?

Want als ik de macro in m'n .dot verander in
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Document_Close()
'
' qvPDF Macro
' Macro opgenomen op 19-9-2006 door Floris
'
    ActivePrinter = "qvPDF"
    Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
        wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
        False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0

End Sub

dan gebeurd er niks bij het afsluiten.

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

F1 ->
Private Sub Document_Close()
Opmerkingen
Als de procedure van een gebeurtenis wordt opgeslagen in een sjabloon, wordt de procedure gestart wanneer een nieuw, op die sjabloon gebaseerd document wordt gesloten en wanneer de sjabloon zelf wordt gesloten (na als een document te zijn geopend).
;)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 23:44
Is het normaal dat wanneer je een Sub Private maakt, dat deze dan ook niet te zien is in je overzicht van Macro's van dat sjabloon? (Extra > Macro > Macro's (ALT+F8) )

Het werkt overigens nog steeds niet, ook niet bij een nieuw document enzo.

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ja. Daarom declareer je het ook als private. Nou ja, dat is niet helemaal waar, maar voor hier is dat een goede samenvatting.

Bij nieuw doc o.b.v. mijn test .dot werkt het hier prima, met
code:
1
2
3
Sub Document_Close()
MsgBox "foo"
End Sub

Kan het dus zijn dat je bijv. bent vergeten je code te ondertekenen met een geldige signature?

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 23:44
F_J_K schreef op dinsdag 19 september 2006 @ 12:31:
Ja. Daarom declareer je het ook als private. Nou ja, dat is niet helemaal waar, maar voor hier is dat een goede samenvatting.

Bij nieuw doc o.b.v. mijn test .dot werkt het hier prima, met
code:
1
2
3
Sub Document_Close()
MsgBox "foo"
End Sub

Kan het dus zijn dat je bijv. bent vergeten je code te ondertekenen met een geldige signature?
Ik heb ook even deze geprobeerd,
Visual Basic:
1
2
3
Sub Document_Close()
MsgBox "test"
End Sub


maar die werkt ook niet. Beveiliging heb ik al op Laag gezet.
Wat bedoel je precies met geldige signature?

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S


  • bommel
  • Registratie: Januari 2001
  • Laatst online: 28-04 16:54
Een dergelijk event maak je anders, zie voor meer info: http://mypage.bluewin.ch/reprobst/WordFAQ/AppEvent.htm (sorry is wel in Duits).
Application-Events für eine nicht globale Dokumentvorlage oder ein Dokument einrichten
Zurück zum Anfang

Wenn Sie sich an folgende Anweisung halten, müsste das Unterfangen eigentlich gelingen:

Schritt I - Applikationsereignisse deklarieren und initialisieren
Erstellen Sie eine neue Dokumentvorlage, welche Sie z.B. Test.dot nennen.

Wechseln Sie mit der Tastenkombination [Alt + F11] in die VBA-Umgebung.

Drücken Sie dort die Tastenkombination [Strg + R] um den Projekt-Explorer anzuzeigen.

Führen Sie im Projekt-Explorer einen Doppelklick auf das Project Ihrer Dokumentvorlage aus.

Führen Sie nun einen Doppelklick auf den Eintrag Microsoft Word Objekte aus.

Schliesslich soll ein Doppelklick auf ThisDocument erfolgen, womit sich das Codefenster öffnet.

Kopieren Sie den nachfolgenden Code in das leere Codefenster.

Speichern und schliessen Sie nun die Dokumentvorlage.


--------------------------------------------------------------------------------

Private WithEvents oApp As Word.Application

Private Sub Document_New()
If oApp Is Nothing Then Set oApp = ThisDocument.Application
End Sub

Private Sub Document_Open()
If oApp Is Nothing Then Set oApp = ThisDocument.Application
End Sub

Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
If Not ActiveDocument.AttachedTemplate = ThisDocument Then Exit Sub
If ActiveDocument.BuiltInDocumentProperties("Author") = "Konsalik" Then
sT = "Das Papierkontigent für Benutzer 'Konsalik' ist bereits aufgebraucht."
MsgBox sT, vbExclamation
Cancel = True
End If
End Sub
(Dieser Code muss in das Klassenmodul mit dem Namen «ThisDocument». Jede MS Word Dokumentvorlage und jedes Word-Dokument besitzt bereits ein Klassenmodul mit diesem Namen. Sie finden es unter «Microsoft Word Objekte».)

  • bommel
  • Registratie: Januari 2001
  • Laatst online: 28-04 16:54

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ah, inderdaad. Of dan beter: http://word.mvps.org/FAQs/MacrosVBA/DocumentEvents.htm

Beveiliging op laag wil je echt niet doen. Of hooguit als test. Maar dan nog kan je best gewoon met een handtekening werken. klikerdeklik.

Ik pas de titel trouwens nog even wat aan, 'PDF maken' zegt niet zoveel over je vraag/probleem. Je hebt het vooralsnog alleen over Word, de events kunnen per applicatie verschillen (logisch: er is niet altijd een Document) dus die zal je per app. moeten vinden. Maar dat lijkt me niet zo'n probleem als het eenmaal draait.

[ Voor 20% gewijzigd door F_J_K op 19-09-2006 13:51 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

FlowDesign schreef op dinsdag 19 september 2006 @ 12:18:Is het normaal dat wanneer je een Sub Private maakt, dat deze dan ook niet te zien is in je overzicht van Macro's van dat sjabloon? (Extra > Macro > Macro's (ALT+F8) )
ja, private procedures & procedures met parameters zijn niet zichtbaar in het macro-overzicht.
Het werkt overigens nog steeds niet, ook niet bij een nieuw document enzo.
deze sub moet je aanmaken in de thisdocument module. de naam van de gebeurtenisprocedure kan je samenstellen aan de hand van de 2 klaplijsten.
Pagina: 1