aangepaste bestandsnaam bij export naar pdf

Status
Niet open voor verdere reacties.

Paperwhite

Gebruiker
Lid geworden
26 dec 2019
Berichten
38
ik heb een simpele database, in Access 365, gemaakt om facturen aan te maken. Op het formulier heb ik een knop gemaakt die een macro uitvoert waardoor een klant aangemaakt wordt in de tabel facturen met een factuurnummer en factuurdatum. Daarna worden de factuurregels bijgewerkt met het factuurnummer en factuurdatum (nodig of niet, dat was de keuze). Daarna wordt de factuur met behulp van het rapport facturen gegenereerd. Daarna wordt in de tabel facturen een vinkje gezet ten teken dat deze factuur daadwerkelijk is gefactureerd.

Echter het is de bedoeling dat het factuurnummer ook als bestandsnaam van de pdf gaat dienen (nu de ???? in onderstaande code).
Mijn ervaring met VBA is 0,0 toch heb ik de macro naar VBA omgezet omdat ik na googlen vermoed dat dat de enige mogelijkheid is om de bestandsnaam te genereren. De conversie ziet er als volgt uit:

Option Compare Database


'------------------------------------------------------------
' Facturen_aanmaken
'
'------------------------------------------------------------
Function Facturen_aanmaken()
On Error GoTo Facturen_aanmaken_Err




DoCmd.SetWarnings False
DoCmd.OpenQuery "klant uit formulier toevoegen aan Facturen", acViewNormal, acEdit
DoCmd.Close acQuery, "klant uit verkopen toevoegen aan Facturen"
DoCmd.OpenQuery "Bijwerken verkopen met fact nr en datum", acViewNormal, acEdit
DoCmd.Close acQuery, "Bijwerken verkopen met fact nr en datum"
DoCmd.OutputTo acOutputReport,????? , "PDFFormat(*.pdf)", "", True, "", , acExportQualityPrint
DoCmd.OpenQuery "Facturatie instellen op ja", acViewNormal, acEdit
DoCmd.Close acQuery, "Facturatie instellen op ja"
DoCmd.Requery ""




Facturen_aanmaken_Exit:
Exit Function


Facturen_aanmaken_Err:
MsgBox Error$
Resume Facturen_aanmaken_Exit


End Function

Ik heb 2 vragen:
1. Als ik bij de knop op het formulier deze code als gebeurtenis procedure wil plaatsen waar moet dat dan?
ik zie:

Private Sub Factuur_aanmaken_Click()


End Sub

De Private Sub en de Function lijken niet samen te gaan. Hoe moet ik dit in elkaar passen?

Vraag 2:
Op de plaats van de ???? in bovenstaande code moet het factuurnummer komen. Ik heb variabelen gedeclareerd en meer dingen die ik eigenlijk niet begrijp geprobeerd, het lukt niet.
Hoe zet ik de verwijzing naar het veld [factuurnummer] in de code zodat het wel kan?

Alvast mijn dank.
 
Om de functie bij klikken uit te voeren :

Plaats " =Facturen_aanmaken() " (zonder aanhalingstekens) in de lijn "Bij klikken" van de bewuste knop.
De gebeurtenisprocedure Private Sub Factuur_aanmaken_Click() is dan niet nodig.

Na het toevoegen van de faktuur aan de tabel kan je via een autonummerveld van je tabel het faktuurnummer opvragen.
(als de tabel geen autonummerveld heeft voeg het dan toe). De nieuwe faktuur heeft automatisch het hoogste nummer.

je kan de functie dan zo aanpassen :

'------------------------------------------------------------
' Facturen_aanmaken
'
'------------------------------------------------------------
Function Facturen_aanmaken()
On Error GoTo Facturen_aanmaken_Err
Dim rapportttitel

DoCmd.SetWarnings False
DoCmd.OpenQuery "klant uit formulier toevoegen aan Facturen", acViewNormal, acEdit

Rapporttitel = DlookUp (“[factuurnummer]”,”tabel facturen”, “[id]=” & DMax(“[id]”,”tabel fakturen”))

DoCmd.Close acQuery, "klant uit verkopen toevoegen aan Facturen"
DoCmd.OpenQuery "Bijwerken verkopen met fact nr en datum", acViewNormal, acEdit
DoCmd.Close acQuery, "Bijwerken verkopen met fact nr en datum"

DoCmd.OutputTo acOutputReport, rapporttitel , "PDFFormat(*.pdf)", "", True, "", , acExportQualityPrint

DoCmd.OpenQuery "Facturatie instellen op ja", acViewNormal, acEdit
DoCmd.Close acQuery, "Facturatie instellen op ja"
DoCmd.Requery ""

[id] = het autonummerveld
Vervang "tabel fakturen" door de naam van je tabel


Paul
 
Laatst bewerkt:
Paul,
Dankjewel, ik denk dat ik begrijp wat je schrijft.
Ik kreeg nog een compileerfout en blijkbaar kan een aangeroepen query niet het formulier klant_id in VBA leveren of zoiets. Het rapport moet het actieve formulier gebruiken voor de te gebruiken gegevens dmv het klant_id op het formulier. Via de macro ging dat goed maar nu liep de code er op vast.
Is niet erg dan doe ik dat stukje wel met een macro en het daadwerkelijk printen en opslaan met VBA zoals jij hebt laten zien.
Dan krijg ik dit stukje code:

Option Compare Database

'------------------------------------------------------------
' Factuur_printen
'
'------------------------------------------------------------
Function Factuur_printen()
On Error GoTo Factuur_printen_Err
Dim bestandsnaam


bestandsnaam = DLookup(“factuurnummer”, ”facturen”, “factuurnummer ="& DMax(“factuurnummer”,”facturen”)) Bij uitvoeren stopt de cursor hier met melding verwacht lijstscheidingsteken of )

DoCmd.OutputTo acOutputReport, bestandsnaam, "PDFFormat(*.pdf)", "", True, "", , acExportQualityPrint



Factuur_printen_Exit:
Exit Function

Factuur_printen_Err:
MsgBox Error$
Resume Factuur_printen_Exit

End Function

Zoals hierboven aangegeven wordt een lijstscheidingsteken of ) verwacht; toevoegen van ) heeft geen effect, als ik de functie Dlookup en Dmax opzoek zie ik niet wat er fout aan zou kunnen zijn.
Vraag is het niet eenvoudiger om het factuurnummer van het rapport zelf te gebruiken? (en zo ja, hoe dan?)
Als het gelukt is om de bestandsnaam te gebruiken kan je daar dan makkelijk een pad voor zetten?

Als je me nog een keer kan helpen, graag!
Reinoud
 
bestandsnaam = DLookup(“factuurnummer”, ”facturen”, “factuurnummer ="& DMax(“factuurnummer”,”facturen”)) Bij uitvoeren stopt de cursor hier met melding verwacht lijstscheidingsteken of )

Zet eens een spatie tussen het aanhalingsteken en de ampersand. " &

Paul
 
in bovenstaande scheerde ik het autonummer veld en en het factuurnummer veld over één kam, hierbij het volgens mij correcte stukje. Fout blijft op hetzelfde punt met vraag om lijstscheidingsteken of ):

Option Compare Database

'------------------------------------------------------------
' Factuur_printen
'
'------------------------------------------------------------
Function Factuur_printen()
On Error GoTo Factuur_printen_Err
Dim bestandsnaam


bestandsnaam = Dlookup(“factuurnummer”, ”facturen”, “autonummer ="& DMax(“autonummer”,”facturen”))

DoCmd.OutputTo acOutputReport, bestandsnaam, "PDFFormat(*.pdf)", "", True, "", , acExportQualityPrint



Factuur_printen_Exit:
Exit Function

Factuur_printen_Err:
MsgBox Error$
Resume Factuur_printen_Exit

End Function
 
Reinoud,

Ik heb het even getest en kreeg dezelfde foutmelding.

bestandsnaam = Dlookup("[factuurnummer]", "facturen", "[autonummer] =" & DMax("[autonummer]", "facturen"))

Na overtypen ( in de VBA-editor van) de aanhalingstekens was de fout verdwenen. Ik had de tekst even eerst in Word getypt voor ik deze op het forum had geplaatst
en blijkbaar heeft de VBA-editor problemen met de vorm van de aanhalingstekens.
Bij de tweede test werkte het zoals het hoort.

Paul
 
Dat is bij mij ook de oplossing.
Maar...
Ik krijg nu ook een prompt om het bestand op te slaan en als ik dat doe dan verschijnt de mededeling "Het object |1 kan niet door Microsoft Access worden gevonden" (|1 staat er zo). Het bestand is ook niet opgeslagen. De macro wordt verder normaal afgewerkt zodat de facturatie op ja wordt gezet in de tabel facturen. Het lijkt er dus op dat het toch nog ergens in dit stukje code fout gaat.
 
Ik ben er achter ik begreep het eerste argument de verwijzing naar het rapport niet goed. Gecorrigeerd, doet wat het moet doen.
Dankjewel,
Reinoud
 
Zouden jullie de volgende keer de CODE tags kunnen gebruiken? Draadje is nu onleesbaar :). Overigens lijkt de procedure (voor zover ik de moed kon opbrengen om hem te lezen) mij voor veel verbetering vatbaar.
 
@Octafish hoe moet dat met CODE tags?
Voor verbetering vatbaar, dat geloof ik direct! Ik schreef in het begin al dat mijn kennis van VBA 0,0 is, dus trial en error zijn mijn leermeesters.
Ik maak dit voor iemand die nog minder van Access weet dan ik en die wil het graag ook zonder mij kunnen begrijpen en/of veranderen. De hele opzet is dus zo simpel mogelijk zonder code; het laatste stukje lukt mij op die manier niet meer.
Met dank aan Paul werkt het nu wel.
 
Hi Paul,

als je meer wil begrijpen en je bent niet bang om het wat professioneler aan te pakken, dan is goalkicker je site. Voor VBA: https://goalkicker.com/VBABook/
Dat is ook de site die ik in mijn cursussen aanraad.
 
Noella,

Bedankt voor de link. Het is niet mijn bedoeling om het professioneel aan te pakken, maar ik ben niet bang om bij te leren. Dus deze cursus zal wel doorgenomen worden.
 
En je kunt uiteraard de Access cursus in de HelpMij Handleidingen sectie er bij pakken :).
 
@Octafish hoe moet dat met CODE tags?
Selecteer je tekst, en klik op de knop #. Of typ de tekst [ CODE ] jouw code [/CODE ] (zonder spaties) rondom je code. De CODE knop zit in het blokje van 3 helemaal rechts in de knoppenbalk.
 
Om te kijken of het slimmer kan (denk het wel :)) zou ik de db moeten zien.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan