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

Verschillende pagina's printen als PDF en naam bepalen vanuit bestand

Status
Niet open voor verdere reacties.

richard1970

Terugkerende gebruiker
Lid geworden
12 mei 2005
Berichten
2.663
Hoi,

Eind maart heeft Warm Bakkertje een macro aangeleverd om voor een tabblad per pagina (gescheiden doorPageBreaks) een PDF te maken.
Zie: http://www.helpmij.nl/forum/showthre...and?highlight=
Ik heb twee aanvullende vragen:
1) De naam is nu de naam van het bestand en kan handmatig aangepast worden in het dialoogvenster 'Opslaan als'. Kan de naam bepaald worden door de waarde uit twee cellen en de datum van de dag (opmaak YYYMMDD)? Als het in principe kan, kan ik aangeven welke cellen dat zijn, want per pagina is dat dezelfde kolom, maar een andere rij, of dezelfde rij maar dan een andere kolom.
2) Kan de macro zo gemaakt worden dat het bestand automatisch opslaat? In de bijgevoegde macro moet je zelf telkens op OK klikken, maar het gaat soms om 100 PDF's.

De huidige macro:
Code:
Sub page_to_PDF()
Dim HPC As Integer
HPC = ActiveSheet.HPageBreaks.Count + 1
Application.ActivePrinter = "CutePDF Writer op CPW2:"
For i = 1 To HPC
    ActiveWindow.SelectedSheets.PrintOut From:=i, to:=i, Copies:=1, ActivePrinter:="CutePDF Writer op CPW2:", Collate:=True
Next
End Sub

Ik hoor het graag.

Groeten,

Richard
 
Code:
Sub page_to_PDF()
Dim HPC As Integer
HPC = ActiveSheet.HPageBreaks.Count + 1
Application.ActivePrinter = "CutePDF Writer op CPW2:"
For i = 1 To HPC
    ActiveWindow.SelectedSheets.PrintOut From:=i, to:=i, Copies:=1, ActivePrinter:="CutePDF Writer op CPW2:", Collate:=True
Next
ActiveWorkbook.SaveAs [A1] & [A2] & Format(Date, "YYYMMDD")
End Sub
Indien de naam van het bestand steeds op een andere plek is, hoe kan VBA weten welke cellen dat zijn?

Met vriendelijke groet,


Roncancio
 
Hoi Ron,

Het bestand is gestructureerd opgebouwd. Voor pagina 1 wordt de naam bepaald door bijv. B2 & datum & B4. Voor pagina twee is dat 19 kolommen naar rechts U2 & datum & U4, voor pagina 3 weer 19 kolommen naar rechts en voor pagina 4 weer 19 kolommen naar rechts. De bestandsnaam voor pagina 5 wordt opgebouwd uit kolom B, maar dan regel 36 en 38. Pagina 6 is dan weer regel 36 en 38, maar dan 19 kolommen naar rechts. Und so weiter...........
Geen idee of dat ook in code lukt in combinatie met printen.
 
Dag Richard,

Dit werkt alleen in excel 2007 of hoger.
Ik weet niet of dat een probleem is.
Verder kan ik het niet test.

Code:
Sub Macro5()
i = 1
For rw = 2 To 1071 Step 34
    For kl = 2 To 78 Step 19
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Cells(rw, kl).Value & Format(Date, "YYYMMDD")
 & Cells(rw + 2, kl).Value, Quality _
            :=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False _
            , From:=i, To:=i, OpenAfterPublish:=False
            i = i + 1
    Next kl
Next rw
End Sub

Niels
 
Laatst bewerkt:
Hoi Niels,

Morgen ben ik weer op mijn werk en ga ik dit testen.
Merçi, je doet het zeker sneller dan ik!
En ik zal dan ook een voorbeeldbestandje uploaden om te laten zien welke cellen er gebruikt moeten worden voor de naamgeving van de PDF.

Richard
 
Goedemorgen,

Hierbij een voorbeeldbestandje. De klant werkt met Office 2003, dus sorry Niels.
Even korte uitleg over hetgeen je hier ziet.
Medewerkers van een thuiszorgorganisatie halen wekelijks 's ochtends op het wijkkantoor een looplijst op zodat ze weten op welk tijdstip ze bij een klant moeten zijn en welke zorg ze moeten leveren. Sommige medewerkers moeten hier ver voor reizen. Handiger is als ze de looplijst vanuit huis kunnen downloaden vanaf het intranet. En om op het intranet vanuit de Excelplanning PDF's te maken heb ik jullie hulp ingeroepen.

De naamgeving van de PDF moet uniek zijn en dat wordt bepaald door een samenvoeging van een paar cellen:
Wijkteam & Naam medewerker & Route & Datum
Deze staan in: V8 & V6 & V3 & datum, en springen steeds 19 kolommen naar rechts, of 43 rijen naar beneden.

Het resultaat zou dan voor de eerste twee routes moeten zijn:
Waterland Zuid Pietje Puk 01/07/WZ/HH 20110627.pdf
Waterland Zuid Black Beauty 01/07/WZ/HH 20110627.pdf

De klus is iets complexer geworden omdat op de tabbladen een maximaal aantal looproutes staat dat niet altijd gevuld wordt. Het kan dus zijn dat een pagina leeg is. Wanneer er geen naam van een medewerker ingevuld is, zou er idealiter niets geprint moeten worden, maar als dat niet te doen is, is dat voor mij geen onoverkomelijk probleem, ware het niet dat je dan geen unieke bestandsnaam meer hebt.

De basisplanning, kolom A t/m R dient niet geprint te worden en valt dan ook buiten het afdrukbereik.

Ik hoor/lees graag wat mogelijk is.

Richard
 

Bijlagen

Een iets andere benadering.
Bij het openen van het bestand verschijnt een menu met de namen van de betreffende cellen.
Zodra men een naam kiest, wordt de knop OK werkbaar en kan men met die knop de lijst van die persoon afdrukken. Zo hoef men dus niet de lijsten van iedereen af de drukken.

Met vriendelijke groet,


Roncancio
 

Bijlagen

Hoi Ron,

Ziet er leuk uit, al gebeurt er niets wanneer ik op OK druk. Is dat bewust?
Ik heb met de opdrachtgever overleg gehad over deze wijze van benaderen, en hij is onder de indruk van wat kan, maar het is de bedoeling dat de planners die dit bestand vullen, met één druk op de knop de hele week kunnen printen. Momenteel printen ze pagina voor pagina door het handmatig te selecteren, dus per medewerker printen is al een stap vooruit, maar als we ze gaan verwennen, dan maar gelijk goed, toch?
Dus een printopdracht voor alle medewerkers in de lijst zou heel fijn zijn. Kan dat?

Richard
 
Ik heb de code al bijgewerkt.
Het menu laat nog steeds de namen zien die gevonden zijn.
Zodra op Afdrukken wordt geklikt, dan worden van al deze mensen het schema afgedrukt.

Met vriendelijke groet,


Roncancio
 

Bijlagen

Hoi Ron,

Ziet er al heel mooi uit. Drie puntjes:
1) Alles wordt nu geprint, maar we willen er PDF's van maken om op te slaan. Daarom begon ik mijn topic ook met de macro van Warm Bakkertje.
2) Alles wordt nu dubbel geprint. Klopt dat?
3) Het afdrukbereik wordt aangepast naar de laatste gevulde looplijst. Waarom is dat?

Richard

Richard
 
Back-to-basic!

Code:
Sub page_to_PDF()
Dim HPC As Integer
HPC = ActiveSheet.HPageBreaks.Count + 1
Application.ActivePrinter = "CutePDF Writer op CPW2:"
For i = 1 To HPC
    ActiveWindow.SelectedSheets.PrintOut From:=i, To:=i, Copies:=1, ActivePrinter:="CutePDF Writer op CPW2:", Collate:=True
Next
For lRow = 6 To 150 Step 43
    For iCol = 22 To 100 Step 19
        If Cells(lRow, iCol).Value <> "" Then .AddItem Cells(lRow, iCol).Value
        ActiveWorkbook.SaveAs Cells(lRow + 2, iCol).Value & Cells(lRow, iCol).Value & Cells(lRow - 3, iCol).Value & Format(Date, "YYYMMDD")
    Next
Next
End Sub
Bovenstaande code is een aanpassing van de code van Warm Bakkertje.
Er worden meerdere bestanden opgeslagen.

Met vriendelijke groet,


Roncancio
 
Hoi Ron,

Back to Visual basic in dit geval :-)
Ik krijg een foutmelding:
Compileerfout: Ongeldige of niet-gekwalificeerde verwijzing.
Code:
If Cells(lRow, iCol).Value <> "" Then [COLOR="navy"].AddItem[/COLOR] Cells(lRow, iCol).Value
Wat betekent dit?

Als ik dit even weghaal, zie ik dat er ook nog een End if bij moet voor Next.

Richard
 
Laatst bewerkt:
Dat betekent dat ik een slordige fout heb gemaakt.
Zo moet het beter gaan.

Code:
Sub page_to_PDF()
Dim HPC As Integer
HPC = ActiveSheet.HPageBreaks.Count + 1
Application.ActivePrinter = "CutePDF Writer op CPW2:"
For i = 1 To HPC
    ActiveWindow.SelectedSheets.PrintOut From:=i, To:=i, Copies:=1, ActivePrinter:="CutePDF Writer op CPW2:", Collate:=True
Next
For lRow = 6 To 150 Step 43
    For iCol = 22 To 100 Step 19
        If Cells(lRow, iCol).Value <> "" Then
            ActiveWorkbook.SaveAs Cells(lRow + 2, iCol).Value & Cells(lRow, iCol).Value & Cells(lRow - 3, iCol).Value & Format(Date, "YYYMMDD")
        End If
    Next
Next
End Sub

Met vriendelijke groet,


Roncancio
 
Hoi Ron,

Ik zit ondertussen thuis en heb daar PrimoPDF. Als ik de printer aanpas krijg ik een foutmelding omdat PrimoPDF blijkbaar direct de bestandsnaam pakt. En als ik vanaf Citrix op het werk inlog heb ik ook geen PDF-printer want die staat lokaal geïnstalleerd. Het project om voor iedereen een PDF-creator beschikbaar te stellen verloopt enigszins moeizaam. :-(
Morgen ga ik weer verder testen.
In ieder geval bedankt voor de moeite tot zover.

p.s. Hoe vind je de tijd overdag? Mij lukt het alleen 's avonds vragen te beantwoorden, en zelfs dat lukt al maanden amper.
 
p.s. Hoe vind je de tijd overdag? Mij lukt het alleen 's avonds vragen te beantwoorden, en zelfs dat lukt al maanden amper.

Ik werk op projectbasis en het project is binnenkort afgerond zodat ik tijd heb om verder te kijken.
Soms heb ik vrij veel tijd, soms heb ik het maandenlang veel te druk om zelfs maar te kijken op helpmij.

Met vriendelijke groet,


Roncancio
 
Ter info. 'k Heb vandaag wegens drukte niet kunnen testen. Wordt donderdag pas weer.
 
Beste Ron,

Nou, het gaat nog niet goed. De looproute die deel uitmaakt van de naam van het bestand bevat minimaal één / en dat wordt door windows geïnterpreteerd als een submap :-) Ik heb de naamgeving aangepast en er puntjes van gemaakt om de macro te kunnen testen, maar kun je converteren van / naar een . ? Zo niet, dan vraag ik vorotaan geen / meer te gebruiken in de looproute.
Toen zag ik dat er geen extensie meekomt. Ik heb daarom aan jouw code de extensie .PDF toegevoegd en een paar spaties voor de leesbaarheid.

Het aantal af te drukken exemplaren is standaard 2 waardoor ik steeds te zien krijg dat het document al bestaat en of ik het wil overschrijven. Ik heb bij de instellingen van de printer gekeken op mijn systeem, maar dat staat op 1. Het vreemde is dat bij het Excelbestand waarme ik test ik via Ctrl+P direct zie dat er twee exemplaren moeten worden afgedrukt? Beetje vreemd, maar hier moet ik zelf even achteraan.

De macro slaat het hele tabblad op in formaat van Excel. Ik kan de PDF niet openen in Acrobat, maar alleen in Excel, en dan zie ik alle pagina's in plaats van ééntje. Als ik een beetje pruts krijg ik de code: Selection.PrintOut Om een selectie te kunnen maken. Dan wordt een pagina op het tabblad wel 1 pdf. Kun je daar iets mee?

Ook heb ik de eerste NEXT verplaatst naar onderen boven End Sub, want anders werd het bestand opgeslagen onder de naam van het bestand.

Tenslotte: Is het mogelijk een standaardmap mee te geven waarin de bestanden moeten worden geplaatst? Nu worden ze standaard geplaatst in de map waarin het Exceldocument is opgeslagen.

Code:
Sub page_to_PDF()
Dim HPC As Integer
HPC = ActiveSheet.HPageBreaks.Count + 1
Application.ActivePrinter = "CutePDF Writer op CPW2:"
For i = 1 To HPC
    ActiveWindow.SelectedSheets.PrintOut From:=i, To:=i, Copies:=1, ActivePrinter:="CutePDF Writer op CPW2:", Collate:=True
    For lRow = 6 To 150 Step 43
        For iCol = 22 To 100 Step 19
            If Cells(lRow, iCol).Value <> "" Then
                ActiveWorkbook.SaveAs Cells(lRow + 2, iCol).Value & " " & Cells(lRow, iCol).Value & " " & Cells(lRow - 3, iCol).Value & " " & Format(Date, "YYYMMDD") & ".PDF"
            End If
        Next
    Next
Next
End Sub

De puzzel blijkt lastiger dan ik had gedacht. Heb je nog tijd?

Richard
 
Laatst bewerkt:
Met ChDir kan je de directory aanpassen.
Ik heb de vraag niet helemaal scherp meer maar ik vond trouwens een interessante pagina waarin veel van je vragen zijn verwerkt in een code om een PDF bestand op te slaan per Excelpagina.
Vooral de 2e code Print Multiple Worksheets to Multiple PDF Files.

Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan