• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

uitdaging: printen naar pdf: tabbladnaam als bestandsnaam

Status
Niet open voor verdere reacties.

roeldahool

Gebruiker
Lid geworden
19 nov 2007
Berichten
40
Hola!

situatie
Ik heb een excelbestand met veel tabbladen. deze heten bijvoorbeeld
companyA1, companyA2, companyA3, companyB1, companyB2, companyB3, companyC1, et cetera.
Ik gebruik een pdf printer die dus pdf pagina's van mijn tabbladen zou moeten maken.
Deze bestanden plak ik later met dat programma aan elkaar zodat ik een digitaal pdf bestand van meerdere pagina's heb.

Elk tabblad bestaat uit meerdere macro's die steeds een bepaald overzicht met andere verkoopdata van een bepaald product vullen. In cel A1 komt bij het klikken op de macro-button voor product 4, de tekst "product 4" te staan.


mijn vraag:
is er een macro mogelijk die ervoor zorgt dat de pdf bestandsnamen als volgt worden opgebouwd:
TABBLADNAAM - WAARDE CEL A1

dus bijvoorbeeld: companyB1 - product 4.pdf



Wie o wie is slim genoeg om me hiermee te helpen? :p



ps: als er in de code kan worden opgenomen dat hij automatisch de pdf printer gebruikt (in plaats van de default printer) dan graag!



.
 
Laatst bewerkt:
De PDF printer die ik gebruik slaat documenten op met de bestandsnaam van het werkblad. Je zult dus in VBA een stukje code moeten schrijven dat één voor één de tabbladen afgaat, het bestand opslaat en dan print

Code:
Public Sub PrintStuff()
  Dim ws As Worksheet
  Dim r As Range
    For Each ws In Worksheets
       Set r = ws.Cells(1, 1)
       ActiveWorkbook.SaveAs ws.Name & " - " & r.Value
       ws.PrintOut , , , , "PDFPrinterName"
    Next
End Sub

Nog verder kan ik het niet voor je voorkauwen. Ik zou de saveas wel naar een temp folder doen, deze kun je bv opvragen middels het filesystemobject
De printernaam zou ik als constante (of variabele) zetten, dan hoef je niet in de code te rommelen als je een andere pdf printer neemt.

binnen 11 minuten.. not quite the challenge lol
 
Laatst bewerkt:
binnen 11 minuten.. not quite the challenge lol

haha! Het doel van voorvoegsel: "uitdaging" was natuurlijk om de strebertjes op dit forum zo snel mogelijk te laten reageren op mijn vraag ;) en dat is dan ook gelukt :P :thumb:
 
filesystemobject

Bedankt voor het oplossen van mijn initiele vraag! Ik heb er erg veel aan!

Ik zou graag "filesystemobject" willen gebruiken maar hoe?
 
Microsoft Scripting Runtime toevoegen aan Extra/References
en dan zoiets als

Public Sub test()
Dim fso As New FileSystemObject
MsgBox fso.GetSpecialFolder(TemporaryFolder)
End Sub

dus:
Code:
Public Sub PrintStuff()
  Dim ws As Worksheet
  Dim r As Range
  Dim fso as new FileSystemObject
    For Each ws In Worksheets
       Set r = ws.Cells(1, 1)
       ActiveWorkbook.SaveAs fso.GetSpecialFolder(TemporaryFolder)
 & "\" & ws.Name & " - " & r.Value
       ws.PrintOut , , , , "PDFPrinterName"
    Next
End Sub

En als ik online ben en tijd heb (zit nu te wachten op een herinstall van een pc) dan reageer ik altijd wel op VB(A) stukjes code hoor.
 
haha het was ook maar een grapje :evil:

Ik zie trouwens dat de code het bestand eerst opslaat. Normaal gesproken is dat geen probleem maar het bestand is dusdanig groot dat het opslaan ervan veel tijd in beslag neemt. Is er ook een code waarbij de pdf als bestandsnaam de tab-naam + waarde van cel A1 kan krijgen zonder het bestand eerst op te slaan?
 
Niet met mijn PDF writer, die neemt altijd de naam van het bestand. Wellicht dat je zou kunnen kijken of je Acrobat als ocx kan toevoegen, maar dat wordt dan een heel apart verhaal.
Wat je wellicht kan doen als dit vaak voorkomt is het opslaan op een ram drive, dat kan eea versnellen.
Je zou ook eens kunnen kijken wat je PDF schrijver doet als je slechts één werkblad opslaat, wellicht dat dat al voldoende is, dus:
Code:
ActiveWorkbook.SaveAs ws.Name & " - " & r.Value
vervangen door
ws.SaveAs ws.Name & " - " & r.Value

Anders moet je maar denken dat het allicht sneller gaat dan handmatig opslaan :p
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan