Verschillende sheets opslaan in PDF mbv VBA

Status
Niet open voor verdere reacties.

royb73

Gebruiker
Lid geworden
19 sep 2012
Berichten
228
Beste,

Ik moet vaak rapporten maken waarbij ik van een aantal bladen apart een PDF moet maken.

Ik ben op zoek naar vba code voor het volgende.

Ik heb een Excel bestand genaamd Mc00123.xlsm (als voorbeeld). Hierin bevinden zich onder andere sheets "Totaal overzicht" en "Overzicht B".

Ik wil van deze 2 bladen aparte PDF's van maken. "Totaal overzicht" moet opgeslagen worden als Mc00123_t.pdf en "Overzicht B" als Mc00123_o.pdf.

Deze 2 bladen dienen opgeslagen worden in de huidige padnaam, maar dan onder subdirectory ........\03 Concept\.

Wie o wie kan mij helpen.

bij voorbaat dank.

Met vriendelijke groet,

Roy.
 
Heb je een voorbeeld bestandje?
 
Prima. Als niemand me voor is zal ik vanavond eens kijken.
 
Ben je niet bekend met de macrorecorder ?
 
Beste snb,

Ik ben wel bekend met de macrorecorder, alleen doet hij niet wat ik wil. Bovendien krijg ik zoveel codes, waardoor ik door de bomen het bos niet meer zie.

Mvg
 
De macrorecorder doet alleen maar wat jij wil, niets meer, niets minder.
 
Dit klopt snb. Echter slaat hij op met dezelfde bestandsnaam, maar niet in de map waarin ik wil. Ik wil een vba code hebben die voor alle rapporten hetzelfde doet. Als ik bijvoorbeeld nu opsla, dan doet hij dat met de naam waarmee ik opsla en niet met een ander rapport met een andere naam want dat slaat hij op met de naam waarmee de macro is opgenomen.

Hoop dat ik een beetje duidelijk heb omschreven.

Mvg

roy.
 
Als je toch iets met macro's wil begin dan eens met het boek 'VBA voor dummies' (Walkenbach).
 
Hang dit achter achter een knopje in dat werkboek:

Code:
Sub MaakPDFs()
    Application.ScreenUpdating = False
    
    'Totaal overzicht
    ActiveWorkbook.Worksheets("Totaal overzicht").Copy
    ActiveWorkbook.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\03 Concept\" & "Mc00123_t.pdf"
    ActiveWorkbook.Close False
    
    'Overzicht B
    ActiveWorkbook.Worksheets("Overzicht huurders_B").Copy
    ActiveWorkbook.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\03 Concept\" & "Mc00123_o.pdf"
    ActiveWorkbook.Close False

    Application.ScreenUpdating = True
    MsgBox "PDF's zijn gemaakt"
End Sub

Het kan veel geavanceerder maar dit is goed leesbaar en dat maakt het eenvoudig voor je om uit te zoeken wat de code precies doet, voor het geval je er zelf mee bezig wilt.
 
Laatst bewerkt:
Beste Edmoor,

Dit is ongeveer wat ik zocht.

Bedankt hiervoor.

Echter zie ik in de code dat Mc00123_t/o.PDF hard gecodeerd staat. Dit Mc00123 was een voorbeeld (is een rapport nummer). Het is de bedoeling dat het bestand als volgt wegschrijft "bestandsnaam"_t & "bestandsnaam"_o.pdf. De bestandsnaam is namelijk het rapportnummer wat elke keer anders is.

Hopelijk heb je een code hiervoor.

Met vriendelijke groet,

Roy
 
Dat had je er niet bij verteld. Al was dat wel een beetje uit je beschrijving te lezen. Zo zie je maar weer hoe belangrijk een duidelijke beschrijving is.

Code:
Sub MaakPDFs()
    Dim OutName As String, OutPath As String
    
    OutName = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4)
    OutPath = ThisWorkbook.Path & "\03 Concept\"
    
    Application.ScreenUpdating = False
    
    'Totaal overzicht
    ActiveWorkbook.Worksheets("Totaal overzicht").Copy
    ActiveWorkbook.ExportAsFixedFormat xlTypePDF, OutPath & OutName & "_t.pdf"
    ActiveWorkbook.Close False
    
    'Overzicht B
    ActiveWorkbook.Worksheets("Overzicht huurders_B").Copy
    ActiveWorkbook.ExportAsFixedFormat xlTypePDF, OutPath & OutName & "_o.pdf"
    ActiveWorkbook.Close False

    Application.ScreenUpdating = True
    MsgBox "PDF's zijn gemaakt"
End Sub
 
Laatst bewerkt:
Beste Edmoor,

Dit werkt perfect.

Alleen heb ik bij Len(ThisWorkbook.Name) - 5) van de 5 een 4 van gemaakt. Nu krijg ik wel de volledige bestandsnaam.

Bedankt voor jouw moeite.

Mvg

Roy.
 
Prima.
Maar als je die in meerdere werkbladen nodig hebt is het handiger om er een invoegtoepassing (.xlam) van te maken. Die voeg je dan aan Excel toe en heb je de code die daarin zit in ieder werkblad voorhanden. Mocht er wat veranderd moeten worden dan hoef je dat maar op 1 plek te doen en is het direct geldig voor alle bestaande en nieuwe werkbladen.

Ook nieuwe Subs of Functions die je daarin maakt heb je dan overal beschikbaar.

(Tikfoutje in voorgaande kode heb ik aangepast. 5 gewijzigd in 4)
 
Laatst bewerkt:
Edmoor,

Ik heb de code in mijn Personal.xlsb opgeslagen en toegevoegd op mijn Ribbon (lint). Wat is eigenlijk het verschil tussen dit en .xlam?

Mvg
 
Dat kan ook. Een invoegtoepassing is eigenlijk voor meer iets voor grotere projecten en kun je op 1 plek installeren waar vandaan meerdere gebruikers hem aan Excel toe kunnen voegen.
 
Het is wel zo, dat meerdere collega's op hun computer van dit module gebruik zullen maken. Is het dan beter als .xlam te gebruiken?
 
Dat vind ik dan zelf inderdaad handiger, anders moet je na iedere wijziging de collega's van een nieuwe Personal.xlsb voorzien.
 
Oké duidelijk. Ga dit ff verder uitzoeken. In ieder geval bedankt voor jouw tip, tijd en moeite.

Mvg

Roy.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan