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

Uitbreiden macro en VBA code met opslaan

Status
Niet open voor verdere reacties.

Chantalz

Gebruiker
Lid geworden
28 jul 2016
Berichten
7
Hallo,

Ik ben een groentje met macro's en VBA, maar het is me gelukt een macro te maken om van meerdere werkbladen een PDF te maken. Daar heb ik ook een knop voor in mijn werkblad toegevoegd, zodat de macro vanaf die knop start.

De enige uitbreiding die nog aan mijn macro ik wil toevoegen, is dat de PDF automatisch wordt opgeslagen. Tot op heden is mij dat niet gelukt, ook niet met de hulp van andere artikelen.

Bijzonderheden:
De PDF moet een naam krijgen die wordt samengesteld uit cel B2 en B3 van het blad waar de macro knop zit (tabblad Dataselectie)
De PDF moet worden opgeslagen op een locatie op de server: \\SERVER01\Shared Folders\Data\Gemeente Den Haag\Rapportages\Jaarrapportage 2015 - 2016

Dit is de code die er nu staat voor de huidige macro:

Private Sub PrintGraphs()
Dim sPath As String, sFilename As String
Dim fso As New FileSystemObject
sPath = Range("PDFpad").Value
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(sPath) Then
Call MsgBox("Pad bestaat niet!", vbOKOnly)
Exit Sub
End If
sFilename = sPath & Range("LedenTitel").Value & ".pdf"
Application.StatusBar = "Creating : " & sFilename
GLeden.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
sFilename = sPath & Range("StagairesTitel").Value & ".pdf"
Application.StatusBar = "Creating : " & sFilename
gStagaires.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
sFilename = sPath & Range("VerhoudingTitel").Value & ".pdf"
Application.StatusBar = "Creating : " & sFilename
gVerhouding.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
sFilename = sPath & Range("JTTitel").Value & ".pdf"
Application.StatusBar = "Creating : " & sFilename
gJT.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
sFilename = sPath & Range("JLTitel").Value & ".pdf"
Application.StatusBar = "Creating : " & sFilename
gJL.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False

End Sub

Hoop dat iemand mij kan helpen.

Alvast bedankt.
 
Jouw macro maakt 4 pdf'jes en slaat die op.
Wat gaat er niet goed?
 
Dit stuk werkt prima. Ik krijg een gezamenlijke PDF van de vier losse PDF's. Ik krijg alleen iedere keer een melding dat ik een locatie en een naam op moet geven. Aangezien ik dat 50 keer moet doen, zou het heel praktisch zijn als ik kan programmeren dat het automatisch op de server opslaat onder een bepaalde naam
 
Gaat het soms om de melding dat het bestand al bestaat en dat wordt gevraagd of deze overschreven moet worden? Zet er dan eens dit in voor het opslaan:
Application.DisplayAlerts = False
 
Laatst bewerkt:
Nee, dat is het niet.

Er gaan twee dingen niet automatisch, namelijk:

1. De goede printer kiezen: als ik het bestand heb afgesloten, en de macro uitvoer, gaat hij de grafieken printen via onze printer i.p.v. PDFCreator.
Bij het programmeren van de macro heb ik tijdens de opname op PDFCreator ingesteld om overschakelen naar de gewone printer te voorkomen, maar dat werkt dus niet.

2. Als ik handmatig de goede printer instel, en dan de macro start via de button, krijg ik de volgende melding:

Bekijk bijlage 275281

Ik wil geen locatie en naam hoeven kiezen, ik wil dat de macro de PDF maakt en vervolgens opslaat als Cel B2 en Cel B3 van het blad Dataselectie.
 
Plaats svp de code tussen codetags. En om het de helpers wat makkelijker te maken doe er een excelbestandje bij.
 
Document en code

Code:
Private Sub PrintGraphs()
    Dim sPath As String, sFilename As String
    Dim fso As New FileSystemObject
    sPath = Range("PDFpad").Value
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(sPath) Then
        Call MsgBox("Pad bestaat niet!", vbOKOnly)
        Exit Sub
    End If
    sFilename = sPath & Range("LedenTitel").Value & ".pdf"
    Application.StatusBar = "Creating : " & sFilename
    GLeden.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
    sFilename = sPath & Range("StagairesTitel").Value & ".pdf"
    Application.StatusBar = "Creating : " & sFilename
    gStagaires.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
    sFilename = sPath & Range("VerhoudingTitel").Value & ".pdf"
    Application.StatusBar = "Creating : " & sFilename
    gVerhouding.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
    sFilename = sPath & Range("JTTitel").Value & ".pdf"
    Application.StatusBar = "Creating : " & sFilename
    gJT.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
    sFilename = sPath & Range("JLTitel").Value & ".pdf"
    Application.StatusBar = "Creating : " & sFilename
    gJL.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, OpenAfterPublish:=False
    
End Sub
 
Laatst bewerkt:
In de code die je plaatste wordt naar mijn mening niets geprint, alleen maar als PDF opgeslagen. De enige knop in je document, op het blad Dataselectie, roept de routine PrintPDFAlles aan en die print inderdaad wel:
Code:
Sub PrintPDFAlles()
'
' PrintPDFAlles Macro
'

'
    Sheets(Array("Jeugdleden", "Verhouding JM", "Jeugdtrainers", "Stagiaires")). _
        Select
    Sheets("Jeugdleden").Activate
    ActiveWindow.SelectedSheets.PrintOut copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
End Sub

Als dan de PDF printer van PDFCreator wordt gebruikt als printer dan is het PDFCreator die de vragen gaat stellen en zal je in de instellingen ervan moeten kijken of je daar wat aan kan doen. Maar waarom zou je een PDF printer gebruiken als je ook gewoon kan opslaan als PDF.
 
Laatst bewerkt:
Het kan zijn dat ik er overheen kijk maar volgens mij kloppen de bijlagen? niet met met de gestelde vraag. De gedefinieerde namen kan ik niet vinden.
 
VenA,

De informatie uit de eerste drie tabbladen is niet relevant (dat zijn de ruwe data). Vanaf tabblad vier wordt het dat wel.

Tabblad vier is Dataselectie, daarin staat de macro voor het printen van de grafieken van tabblad 6 (jeugdleden), 7, 8 en 9 (stagiaires). Zit onder de knop print PDF's van geselecteerde vereniging.

Bekijk bijlage 275319

Tabblad vijf verwerkt de data vijf tabblad 1 t/m 3 op basis van de selectie in tabblad vier tot de grafieken in 6 t/m 9.
 
Ik begrijp ook na herlezen nog steeds niet goed wat je wilt bereiken. Wil je:
1a. Dat de tabbladen worden geprint
1b en worden opgeslagen als PDF
2 Dat de tabbladen worden opgeslagen als PDF

Ik krijg de indruk dat je 2 wilt, en dit wilt bereiken op een voor mijn gevoel omslachtige manier, nl. via PDFCreator. Het is prima mogelijk om vanuit Excel zonder tussenkomst van andere tools PDF's te creëren.
 
Het gaat om 2, opslaan als PDF.

De macro had als doel om dat per vereniging te automatiseren, zodat ik in een keer een rapport van een vereniging in PDF kon zetten. Dus druk op de knop en hup een PDF met naam van cel B2 en B3 voor een bepaalde vereniging.

Daarnaast moest er dan ook nog een optie zijn om de macro voor alle verenigingen in de lijst te herhalen, en dus in een keer alle losse rapporten van de verenigingen te krijgen, maar zover was ik nog niet.
 
Vervang je macro eens met de volgende code:
Code:
Sub PrintPDFAlles()
'
' PrintPDFAlles Macro
'

'
    Sheets(Array("Jeugdleden", "Verhouding JM", "Jeugdtrainers", "Stagiaires")). _
        Select
    Sheets("Jeugdleden").Activate
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Temp\Peter\" & Sheets("Dataselectie").Range("B2").Value & " " & _
        Range("Verenigingenkeuze").Value, Quality:=xlQualityStandard, _
           IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

End Sub

Let op:
Voor mijn testje heb ik de mapnaam gewijzigd. Deze moet je nog aanpassen naar de juiste mapnaam
Het is beter om cel B2 ook een naampje te geven. Dan kun je ook daar verwijzen naar de naam
De PDF wordt nu getoond. Wil je dit niet dan moet je OpenAfterPublish op False zetten

Succes!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan