• 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.

Met vba printen als pdf en automatisch bestandsnaam geven

Status
Niet open voor verdere reacties.

shalhevet

Gebruiker
Lid geworden
9 okt 2007
Berichten
245
Hoi,

In mijn uren registratie bestand heb ik een knopje gemaakt. Deze moet wanneer op gedrukt wordt het bestand als pdf exporteren.

Het gaat redelijk goed maar ik zou de naam van het bestand aan de hand van een cel waarde willen bepalen.

In cel F13 heb ik het weeknummer staan. Ik wil dan ook dat het pdf die gemaakt wordt naar cel F13 kijkt en vandaar de naam haalt (bijvoorbeeld week 32).

Maar het lukt mij niet. Heb al suf gezocht op google en kwam ook erg veel voorbeelden tegen maar geen enkele doet wat ik wil.

De code (die ik overigens ook van google heb) is:

Code:
Sub PDFMaken()
    With ThisWorkbook.Sheets("week32")
        
        .Copy
        Dim BestandsNaam As String
[COLOR="#FF0000"]Pad = ThisWorkbook.Path & "\Uren Registratie\" & "ActiveSheet.Range(F13).value" & ".pdf"[/COLOR]

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Pad + BestandsNaam, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

    End With
    ThisWorkbook.Save
End Sub

Als ik met deze code het bestand opsla krijg ik het wel in de goede map, als pdf maar met de naam "ActiveSheet.Range(F13).value - terwijl de naam moet zijn Week_32

Waar gaat het mis?
 
Verwijder de " tekens uit "ActiveSheet.Range(F13).value".
Dus:
Pad = ThisWorkbook.Path & "\Uren Registratie\" & ActiveSheet.Range(F13).value & ".pdf"
 
Er zitten inderdaad wat meer rare dingen in. Probeer hem eens zo:
Code:
Sub PDFMaken()
    Dim BestandsNaam As String
    pad = ThisWorkbook.Path & "\Uren Registratie\" & ActiveSheet.Range("F13").Value & ".pdf"
    
    ThisWorkbook.Sheets("week32").Copy
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=pad, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
    ThisWorkbook.Save
End Sub
 
Jaaa, hij doet het :-)

Hartelijk dank.

Nu zou ik de copy die gemaakt wordt automatisch willen afsluiten en de origineel bestand automatisch willen opslaan.

Hoe doe ik dat?

Ik heb al geprobeerd om de code aan te passen door:

Code:
Sub PDFMaken()
    Dim BestandsNaam As String
    pad = ThisWorkbook.Path & "\Uren Registratie\" & ActiveSheet.Range("F13").Value & ".pdf"
    
    ThisWorkbook.Sheets("week32").Copy
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=pad, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
  [COLOR="#FF0000"]  ThisWorkbook.Close

End with
ThisWorkbook.Save[/COLOR]
End Sub

Maar dat werkt niet :-(
 
Waarom zet je er een End With in als er geen With is?
De Close en Save zou ik omdraaien.
 
Waarom?? omdat ik niet echt weet wat ik aan het doen ben hahaha :o

Ik probeer maar wat.

Ik dacht dat ik eerst de Close opdracht moest geven zodat hij de kopie bestand afsluit en daarna de Save zodat hij de origineel (die dan nog als enige nog open zou moeten zijn) zou opslaan.

Bij het afdrukken naar de pdf bestand maakt hij een kopie van de sheet week32.

Deze wordt dan in Excel geopend als Map(nummer).

Na het maken van de pdf blijft de kopie (Map(nummer) geopend. Deze zou ik automatisch willen afsluiten.

Ik heb de Close en Save omgedraaid maar dat helpt ook niet.
 
Zo?
Code:
Sub PDFMaken()
    pad = ThisWorkbook.Path & "\Uren Registratie\" & ActiveSheet.Range("F13").Value & ".pdf"
    ThisWorkbook.Sheets("week32").Copy
    ActiveSheet.ExportAsFixedFormat xlTypePDF, pad, , True, , , , True
    ActiveWorkbook.Close False
    ThisWorkbook.Save
End Sub
 
Ik zou wel het Dim statement er in laten omdat hij anders niet compileert als het project begint met Option Explicit.
 
De Dim statement 'Bestandsnaam' helpt weinig als de String 'pad' is...
Code:
Sub PDFMaken()
    Dim pad As String
    pad = ThisWorkbook.Path & "\Uren Registratie\" & ActiveSheet.Range("F13").Value & ".pdf"
    ThisWorkbook.Sheets("week32").Copy
    ActiveSheet.ExportAsFixedFormat xlTypePDF, pad, , True, , , , True
    ActiveWorkbook.Close False
    ThisWorkbook.Save
End Sub
Beter?
 
Die was inderdaad fout in de code van TS en heb ik "pad" van gemaakt. Maar het is wel netjes om altijd je variabelen te declareren.
Hier maakt het niks uit maar in een groter project heb je daar alleen maar gemak van, zeker als je meerdere typen en meerdere scopes gebruikt.
 
Het werkt perfect. Hartelijk dank voor jullie allebei voor de moeite.

Echt fantastisch!

Ik zet deze topic op "opgelost".
 
ok, wacht... ik dacht slim te zijn maar blijkbaar is mijn kennis van vba echt zoooo klein dat ik het niet voor elkaar krijg.

Ik heb natuurlijk meerdere sheets in de werkboek. Per kwartaal 3 maanden met daarin iedere week op een aparte sheet.

Ik heb de "print" knop op alle sheets gezet en de code gewijzigd:

Code:
Sub PDFMaken()
    Dim pad As String
    pad = ThisWorkbook.Path & "\Uren Registratie\" & "_" & "WK" & ActiveSheet.Range("B13").Value & ".pdf"
    [COLOR="#FF0000"]ThisWorkbook.ActiveSheet.Copy[/COLOR]
    ActiveSheet.ExportAsFixedFormat xlTypePDF, pad, , True, , , , True
    ActiveWorkbook.Close False
    ThisWorkbook.Save
End Sub

Ik dacht dat door dit te doen zal hij telkens de actieve sheet gebruiken om te printen. Dus als ik in week 34 sta zou deze week afgedrukt moeten worden. Maar blijkbaar werkt het niet zoals ik dacht.

Wat zou ik moeten veranderen in de code?
 
Naar mijn mening vrij weinig, want bij mij werkt het uitstekend.
Zou trouwens wel 'pad' aanpassen
Code:
pad = ThisWorkbook.Path & "\Uren Registratie\_WK" & ActiveSheet.Range("B13").Value & ".pdf"
Je 'uren registratie' staat al tussen quotes. Dus je overige tekst zoals je '_' en 'WK' kunnen achter 'uren registratie' staan tussen de "-tekens (quotes)
 
Laatst bewerkt:
Ik ben erachter. Als ik een nw. button maak dan werkt de code niet maar als ik de eerste sheet kopie en de naam wijzig dan werkt het wel.

Probleem opgelost.

Bedankt voor de tip wat betreft de pad. Heb deze ook gewijzigd.

Hartelijk dank
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan