Avatar billede hugopedersen Nybegynder
06. maj 2011 - 13:43 Der er 12 kommentarer og
1 løsning

Gemme Word dokument som PDF fra Access

Jeg har en applikation hvor jeg har lavet en masse automatisering af Word fra Access (en form for dokumentstyringssystem)
Men nu ville jeg gerne kunne gemme et Worddokument som en PDF fil.
Nogen der har prøvet det og kan fortælle hvordan.

Det er jo normalt ikke noget probelm at gemme f.eks. en rapport som PDF - acFormatPDF (Kræver en plugin i Access 2007, men er standard i 2010 versionen)
Avatar billede neoman Novice
06. maj 2011 - 13:50 #1
Hvad med at printe den til en pdf printer ?
Avatar billede hugopedersen Nybegynder
06. maj 2011 - 16:44 #2
Hvad skulle det lige hjælpe?
PDF formatet er indbygget i Office 2010 og hvis jeg skal bruge en PDF printer så skal jeg være sikker på at alle brugere har den installeret o.s.v.
Avatar billede falster Ekspert
08. maj 2011 - 16:17 #3
Hvis brugerne skal kunne gemme Worddokumentet til pdf - uafhængig af Wordversion - tror jeg ikke, at du kan komme uden om at sikre dig, at de har "noget" installeret ud over Word - f.eks. en pdf-printer.

Men dit behov er måske misforstået af mig?
Avatar billede hugopedersen Nybegynder
08. maj 2011 - 17:09 #4
Jeg ved at de har Office 2010 (skulle der gemme sig en enkelt i et mørkt kontor, så har de Office 2007 + SaveAsPDFandXPS udvidelsen) og der er en indbygget måde i Access' DoCmd.Output der kan bruge acFormatPDF så f.eks. en rapport gemmes som en PDF fil - det virker fortrinligt og jeg bruger det rigtig meget.

I mit system har jeg en funktion hvor man kan vælge at sende et dokument via mail og her vil jeg gerne kunne omdanne dokumentet til en PDF fil først så det bliver vanskeliggjort at ændre i det.

Altså tage fat i dokumentet, gemme det som PDF - alt gjort fra Access og helst uden at brugeren ser andet end måske lige Word åbnet i et blink.

Hvis man slår wdFormatPDF op på Google, så findes den også. Så det må kunne lade sig gøre på en måde.
Avatar billede Slettet bruger
09. maj 2011 - 13:11 #5
optag det, at gemme som pdf i word, og brug vba koden i access vba koden.
Avatar billede Slettet bruger
09. maj 2011 - 13:12 #6
optag det, at gemme som pdf, som makro i word; og brug vba koden i access vba koden.
Avatar billede hugopedersen Nybegynder
09. maj 2011 - 19:38 #7
Jeg har lavet følgende funktion som gør det jeg gerne vil have den til og hvis det gør godt returnerer den navnet på den dannede PDF

fhpFilePart er en funktion der kan returnere en bestemt del af et filnavn.

Public Function fhpWordToPDF(aDocument As String) As String
' -----------------------------------------------------------------------------------
' Purpose    : Knoverterer et Worddokument til PDF
' Parameters :
' Returns    : String
' Created    : 08-05-2011
' Modified  :
' Remarks    :
' -----------------------------------------------------------------------------------
On Error GoTo Error_fhpWordToPDF
  Dim aPDF As String
  Dim appWord As Object

  aPDF = fhpFilePart(aDocument, hpFile_Path) & _
        fhpFilePart(aDocument, hpFile_Base) & ".pdf"

  Set appWord = CreateObject("Word.Application")
  appWord.WindowState = wdWindowStateMaximize
  appWord.visible = True
  appWord.Activate
  appWord.Documents.Open aDocument
  appWord.Documents(aDocument).ActiveWindow.Activate

  appWord.ActiveDocument.SaveAs aPDF, FileFormat:=Word.WdSaveFormat.wdFormatPDF
  appWord.Quit wdDoNotSaveChanges

  Set appWord = Nothing
  fhpWordToPDF = aPDF
 
Exit_fhpWordToPDF:
  Exit Function

Error_fhpWordToPDF:
  fhpWordToPDF = ""
  Select Case Err.Number
    Case 3021
    Case 2501
    Case Is < 0
    Case Else
      MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpWordToPDF'"
      fhpError_Display "modOffice", "fhpWordToPDF"
  End Select
  Resume Exit_fhpWordToPDF

End Function
Avatar billede Slettet bruger
09. maj 2011 - 22:42 #8
OK - så fik vi den - ser at brugeren lige skal briefes (visible=true). Er den 'select case' starten på noget mere udbygget?
Avatar billede hugopedersen Nybegynder
10. maj 2011 - 10:04 #9
Ja Visible kunne godt være false - det var bare for at jeg kunne se om der nu også skete noget

Hvis der er Select Case Err.Number du mener, så er det bare for at undgå diverse uinteressante fejl (2501 er noget med at Open was canceled, 3021 kan jeg ikke huske hvad betyder) Det er noget jeg begyndte med for mange år siden da jeg fik min første version af FMS codetools.
fhpError_Display er min egen fejlroutine der viser en form hvor brugeren kan taste nogle ekstra oplysninger som gemmes i en logfil, som så senere kan sendes til mig for fejlsøgning.
Avatar billede Slettet bruger
11. maj 2011 - 14:39 #10
Gør 'select Case Err.Number's afslutning med en 'case else' ikke hele select'en overflødig? - bortset fra som skabelon for rettelser hvor man så fjerner 'case else' og tilføjer under de enkelte cases.

Jeg bruger også masser af små funtioner - ikke kun for at undlade at genskrive de samme ting gang på gang - men også fordi vba er så lowlevel at man tvinges ud i variabel gymnastik omkring detaljer.
Det gør programmering kedeligt og skjuler gennemsigtigheden af løsningslogikken på anvendelsplanet.


Eksempel på en 'one-liner', der 'sparer' kravet om tilstedeværelse af en variabel.

Function leftOfInstrRev(str, stringMatch): leftOfInstrRev = Left(str, InStrRev(str, stringMatch) - 1): End Function

så kan kilden til brug til extension skift af et filnavn både angives litteralt eller som sammensat udtryk eller angivet af variabel:

leftOfInstrRev(wordfile,".") & ".pdf"

En anden dejlig vba feature er 'unnamed variables' som også virker på objekter

with CreateObject("Word.Application")
  if val(.version) >= 10 then
    ...
Avatar billede hugopedersen Nybegynder
11. maj 2011 - 16:01 #11
Gør 'select Case Err.Number's afslutning med en 'case else' ikke hele select'en overflødig?

Det mener jeg absolut ikke den gør - hvis de fjernes så får jeg uønskede fejlmeddelelser smidt i hovedet for 2501 og 3021 og 'Application specific' som er < 0

Jeg har altid lært at hvis man skal referere til noget mere end 1 gang, så brug en variabel for at minimere risikoen for fejl. aPDF kunne godt være skiftet med fhpFilePart(aDocument, hpFile_Path) & fhpFilePart(aDocument, hpFile_Base) & ".pdf"
Men da den bruges 2 gange så siger min barnelærdom mig at man laver en variabel. 
Men det er selvfølgelig 30 år siden jeg lærte det, så det kan da godt være gammeldags :-)
Avatar billede Slettet bruger
11. maj 2011 - 20:07 #12
Jeg tog fejl af noget så simplet som 'select case' syntaksen - forvekslede med switch i C og Java - du har naturligvis ret.

Ingen kan betvivle hvad du skriver om variable anvendelse.
Avatar billede hugopedersen Nybegynder
03. juni 2011 - 13:47 #13
Lukker og slukker her.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester