Foutmelding bij de creatie van een pdf-bestand in Access 97.

M&V

Gebruiker
Lid geworden
9 dec 2025
Berichten
8
Jaren geleden heb ik een facturatieprogramma geschreven in Access 97.
Dat programma draait sindsdien op een XP pc – los van internet.
Nu wordt me gevraagd om de output van die Accestoepassing ook in een pdf file te stoppen.
Voor het testen van deze aanpassingen gebruik ik een PC van mezelf.
Op deze PC draait XP pro sp 3 en uiteraard Access97.
Maar deze PC was ooit mijn werkpc en daarom staat er ook een recentere versie van Office op (2002) en nog andere MS software zoals Project (2003)

Voor het aanmaken van de pdf-file het ik in de toepassing een en ander aangepast en gebruik voor het maken van de pdf het volgende commando:

DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, stFilePath, False

Als ik de code test krijg in een foutboodschap die zegt dat er iets zou ontbreken in mijn XP-installatie. (zie screenshot)
Een herstel van Access 97 met de originele CD levert niets op.

Ik heb nog niet getest (kunnen testen) op de PC waarop het programma uiteindelijk moet draaien maar ik heb toch graag een testomgeving voor mezelf en dus is mijn vraag of iemand een idee heeft hoe ik deze fout kan oplossen.

Met dank

Marc
 

Bijlagen

  • foutboodschap.PNG
    foutboodschap.PNG
    54,1 KB · Weergaven: 10
Access 97 kan/kon zelf geen pdf's produceren, daar heb je een apart programma voor nodig. Access kan wél zo'n extern programma gebruiken om daarmee pdf's te maken, maar zonder pdf-creator kun je dus niks.
Dat je nog met zulke oude apparatuur/software werkt helpt natuurlijk ook niet. Je moet dan namelijk ook zo'n oud programma hebben dat nog op een zo draait.
Ik heb (ook uit die tijd) wel eens een database gevonden waar de noodzakelijke code/module in zat, zodat ik ook met Access 97 pdf-jes kon uitdraaien, maar makkelijk was het allemaal niet. Ik weet ook niet of ik die database nog heb.

Ik zou, als ik jou was, overstappen op een wat nieuwer systeem, met een betere Access versie. Er is wat voor te zeggen om 30 jaar oude software te vervangen :).
 
Bedankt alvast voor de reacties.
Ga cutepdf eerst uitproberen.

@ octafish:
Ik weet dat dit (zeer) oude software is.
Een conversie is er nooit van gekomen omdat ik kort na het schrijven van dit programma een andere job had aangenomen die me maar weinig vrije tijd gaf.
Een conversie zag ik dus niet zitten.
De euro conversie heb ik nog wel gedaan in de schaarse vrije momenten maar nadien is het programma gebleven wat het was.
Misschien moet ik dat alsnog doen maar op korte termijn zoek ik toch een mogelijkheid om dit pdf-bestanden aan te maken.
 
Je beste kans op dit moment is software vinden die nog op XP draait en een PDF printer installeert. Cutepdf, pdfxchange e.d. zijn mogelijke kandidaten. Vanuit Access kun je het formulier dan printen naar de PDF printer.
 
Allen,

Mogelijk heb ik mijn vraag toch niet duidelijk genoeg geformuleerd.
Mijn probleem is dat ik via vbacode een pdf wil maken.
Hiervoor heb ik het docmd commando gebruikt
DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, stFilePath, False
Dat levert de foutboodschap op.
Het afdrukken van gelijk welk formulier dat ik open in access kan ik manueel perfect opslaan als een pdf.
Adobe pdf stond er al op en u ook cutepdf (zie screenshot)
Maar via die zaken lukt het dus niet.

Ik meen ergens een methode gezien te hebben waarbij de defaultprinter via vbacode wordt aangepast.
Maar dat moet ik verder onderzoeken.
Als ikzelf de defaultprinter op bv. adobe zet dan maakt access wel degelijk een pdf file aan, alleen kom hij tekens vragen wat hij ermee moet doen en moet manueel de naam aangepast worden.
En dat wil juist oplossen met de hiervoor vermelde code.

Dus: alle suggesties zijn meer dan welkom.
 

Bijlagen

  • Printers .GIF
    Printers .GIF
    55 KB · Weergaven: 6
Mogelijk heb ik mijn vraag toch niet duidelijk genoeg geformuleerd.
Mijn probleem is dat ik via vbacode een pdf wil maken. Hiervoor heb ik het docmd commando gebruikt
DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, stFilePath, False
Je snapt blijkbaar de antwoorden niet. Access (79) kán geen pdf bestanden maken. Daarvoor heb je toch echt een api voor nodig van een ander programma zoals CutePDF, dat ik in die tijd jarenlang heb gebruikt. Acrobat is ook zo'n pakket, en er zijn er veel meer. Wat je met DoCmd acFormatPDF doet, is niets meer en niets minder dan de aanwezige pdf engineer gebruiken, van dus het pdf programma van jouw keuze.

Zoals ik al schreef: ik heb wellicht nog een database waarin iemand een module heeft gemaakt die binnen Access, dus volledig in VBA, het rapport opmaakt als pdf. Maar a) weet ik niet zo snel waar die is gebleven, en b) heb ik geen idee of die nog werkt, aangezien ik wél twee minuten over had om een access dub te converteren naar het nieuwe format (meer is het namelijk niet) en ik dus alle db's heb geconverteerd.

Ik zou, als ik jou was, het rapport exporteren naar (bijvoorbeeld) RTF en dat converteren naar pdf.
 
Beste,

Ik denk dat ik u begrepen heb.
Ik moet op zoek naar een pdf-writer.
Uw laatste suggestie werkt el en niet. De export naar rtf lukt maar de layout is verdwenen.

In elk geval bedankt voor de gedane suggestie.
Ik zoek nog even verder.
 
M&V,

Zou dit proberen, even goed lezen.

' VBA in Access 97
' Print een rapport naar PDF door de standaardprinter tijdelijk te wijzigen

Declare Function GetProfileString Lib "kernel32" _
Alias "GetProfileStringA" (ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long) As Long

Declare Function WriteProfileString Lib "kernel32" _
Alias "WriteProfileStringA" (ByVal lpszSection As String, _
ByVal lpszKeyName As String, ByVal lpszString As String) As Long

Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long

Const HWND_BROADCAST = &HFFFF&
Const WM_SETTINGCHANGE = &H1A

Sub PrintReportToPDF()
Dim oldPrinter As String
Dim buffer As String * 255
Dim ret As Long

' Huidige standaardprinter ophalen
ret = GetProfileString("Windows", "Device", "", buffer, Len(buffer))
oldPrinter = Left$(buffer, InStr(buffer, Chr$(0)) - 1)

' Nieuwe standaardprinter instellen (naam moet exact overeenkomen!)
WriteProfileString "Windows", "Device", "Bullzip PDF Printer"
SendMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0&, ByVal 0&

' Rapport afdrukken
DoCmd.OpenReport "rptFactuur", acViewNormal

' Standaardprinter terugzetten
WriteProfileString "Windows", "Device", oldPrinter
SendMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0&, ByVal 0&
End Sub



Groet,
 
@Pletter:
Plaats je code in codetags, voor de leesbaarheid.
Zie de link in mijn handtekening.
 
@Pletter,

Vooreest erg bedankt voor uw gedetailleerde bijdrage.
Ik moet wel toegeven dat er op het eerste zicht voor mij een aantal onbekende zaken in staan.
Maar ik ben ook geen specialist in deze.
Zoals je in vorige berichten kon lezen is het al ruim 20 jaar gelden dat ik nog een lijn code heb geschreven.
Maar ik ga dit zeker proberen en laat hoe dan ook het resultaat weten.
maar de komende dagen kan ik aan dit 'access-verhaal' niet verder werken.
Mogelijk iets voor het weekend,
Maar wordt vervolgd.

Mvg
Marc
 
@Pletter,

Ik heb, zoals aangegeven, nog niets met je code gedaan maar bij het bekijken van je code vroeg ik me af waar u in deze code aangeeft waar dat pdf-document moet komen én hoe je oplost dat je meerdere pdf-documenten in dezelfde map krijgt.
Misschien begrijp ik je code niet goed maar dit kwam spontaan in me op.
Maar vermoedelijk kan u daar ook een verklaring/oplossing voor suggereren.

Mvg

Marc
 
De code van pletter doet niet zoveel bijzonders: sowieso moet je dus een programma als CutePDF hebben geïnstalleerd als extra (pdf)printer. Daarna kun je met een knop een rapport (in het voorbeeld met de vaste naam rptFactuur) afdrukken. Als je dat programma (laten we voor het gemak aannemen dat je CutePDF gebruikt) hebt geïnstalleerd, kun je net zo goed en snel het rapport openen, en dan even de CutePDF printer selecteren, die je dan zelf de naam en locatie laat kiezen.

Probeer dat dus eerst, voordat je van alles gaat programmeren (wat niet echt nodig is; als je een rapport opslaat met een specifieke printer, onthoudt Access die instelling), het afdrukken met CutePDF. Wellicht heb je daar al meer dan genoeg aan.
 
Ik heb de CuteDpf al bijkomend geïnstalleerd.(enkele dagen terug)
Alleen levert me dit geen ander resultaat op.
Hoe laat in Access 97 weten dat hij die pdf-printer moet gebruiken.
In heb ergens iets gelezen van een add-in, maar dat was te hoog gegrepen voor mij.
Moet er misschien een extra commando in vba toegevoegd worden?
De huidige code met
DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, stFilePath, False
lijkt me te werken, behalve dat Access 97 niet weet wat met de output te moeten doen.
Vandaar mijn vraag: hoe maak je Access wijs dat er een pdfwriter is?

Met dank voor alle hulp.

Mvg

Marc
 
Nogmaals: CutePDF is een (virtuele) printer. Rapporten zijn bedoeld om af te drukken, dus het is heel simpel: je opent een rapport in de Rapportweergave, drukt op de knop Afdrukken, en kiest niet je (inkjet?)printer, maar CutePDF. Meer is het niet. In CutePDF bepaal je vervolgens de naam, en de locatie.

Geen idee waarom je dat zou willen automatiseren.
 
Het betreft hier een facturatieprogramma en naast de geautomatiseerde afdruk van de factuur naar een fysieke printer vraagt men nu om ook een elektronische versie te maken (in pdf)
Daarom heb ik na de code die de fysieke afdruk uitvoert code toegevoegd die me een pdf zou moeten aanmaken. En daar loopt access vast omdat die geen pdf-writer in zich heeft.
(foutboodschap enkele entry's hiervoor)
Ik kan een factuur ook manueel oproepen en opslaan als pdf maar dat wil ik de mensen die dit programma gebruiken niet aandoen.
Daarom mijn poging die facturen geautomatiseerd in een specifieke dir op te slaan met een naam die verwijst naar het factuur nr.

Ik begin te vrezen dat mijn doelstelling via access 97 te hoog gegrepen is, maar ik wil het toch een kans geven.
 
Terug
Bovenaan Onderaan