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

VBA code printen als pdf

Status
Niet open voor verdere reacties.

shalhevet

Gebruiker
Lid geworden
9 okt 2007
Berichten
245
Hallo,

Ben al een tijdje mee bezig met het zoeken naar de juiste oplossing maar wat ik ook probeer lukt gewoon niet.

Mijn uren registratie bestand bestaat uit diverse werkbladen, voor iedere week aparte werkblad. iedere werkblad heeft de naam van het betreffende week.

Mijn facturen worden via een andere Excel bestand gemaakt. Ze krijgen allemaal de naam 2013### (# staat voor volgnummer factuur, dus 001, 002).

Facturen worden met behulp van vba code als pdf uitgeprint. Nu wil ik de code zodanig aanpassen dat wanneer een factuur wordt gemaakt, wordt de juiste week in de uren registratie bestand gezocht en wordt het factuur nummer in cel B19 gezet.

Ik heb al veel gezocht op het net maar kan geen code vinden die zoiets doet.

Weet iemand raad?

De code die aangepast moet worden is:

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

Factuur wordt genoemd n.a.v. inhoud van cel F14.

De opbouw van de folders:

Excel bestand uren registratie
Excel bestand factuur
Folder "uren registratie" = hier worden alle pdf bestanden van het uren registratie bestand opgeslagen
Folder "facturen" = hier worden alle pdf bestanden van de facturen bestand opgeslagen.

Is er iemand die mij kan helpen?

Alvast bedankt
 
Allemaal op nogal fictieve info gemaakt, misschien ken je er wat mee.
Anders moet je toch even voorbeeldjes plaatsen...
Code:
Sub Spaarie()
    fac_nr = ActiveSheet.Range("F14").Value
    path_pdf = ThisWorkbook.Path & "\Facturen\_" & fac_nr & ".pdf"
    week = ActiveSheet.Name
    ThisWorkbook.ActiveSheet.Copy
    ActiveSheet.ExportAsFixedFormat xlTypePDF, path_pdf, , True, , , , True
    ActiveWorkbook.Close False
    Workbooks.Open ThisWorkbook.Path & "\Uren registratie\" & week & ".xlsx" 'weet niet je exacte locatie en naam
    ActiveWorkbook.Sheets(week).Range("B19") = fac_nr
End Sub
 
Laatst bewerkt:
Om even samen te vatten alvorens eraan te beginnen.
Wanneer je een factuur maakt moet Urenregistratie geopend worden (of is dit altijd geopend ?) , moet het tabblad met de week uit factuurbestand F13 geactiveerd worden en moet dan het factuurnummer uit factuurbestand F14 geplaatst worden in weektab B9. Moet daarna Urenregistratie terug gesloten worden of open blijven ?
 
Warme bakkertje,

Uren registratie bestaat uit 4 bestanden genaamd "uren registratie 1e kwartaal", "uren registratie 2e kwartaal", "uren registratie 3e kwartaal", "uren registratie 4e kwartaal".

Alle bestanden (dus ook het factuur bestand) worden opgeslagen in 1 map.

Als ik een factuur maak moet gezocht worden in de 4 bestanden van de uren registratie naar de juiste week, het bestand moet geopend worden, factuur nummer uit het factuur bestand (cel F14) moet in de uren registratie bestand geplaatst worden in cel B9.

Uren registratie bestand dient daarna gesloten te worden en het factuurbestand dient open te blijven.
 
Ik heb je op voorhand gewaarschuwd dat werken met 4 verschillende bestanden een slecht idee was en zoeken naar problemen, nietwaar ?
Ik zou dan eerder in je factuurbestand een lijst aanmaken met alle weeknummers en de daaraan verbonden bestandsnaam in de volgende kolom.
Dan zou je in die lijst kunnen zoeken naar het vereiste weeknummer en kan je onmiddellijk het juiste bestand openen ipv 4 verschillende bestanden te openen, alle tabbladen controleren op weeknummer om zo het juiste tabblad te vinden.
 
ja Rudi, je hebt me idd gewaarschuwd en ik heb je uitgelegd dat om alle weken van een hele jaar in 1 bestand doen maakt het bestand te groot met gevolg dat hij ook erg kwetsbaar wordt en de kans dat hij beschadigd raakt en / of vast loopt ook erg groot is.

Peter heeft mij toen kunnen helpen met een code die wel in alle 4 bestanden zoekt (was met de hide_unhide code om de werkbladen te verbergen en via de index pagina weer te herroepen).

Hij maakte gebruik van een VLookup functie.

Ik neem aan dat je dat ook bedoelt nu met een lijst maken?

Maar hoe zorg ik dat de gegevens van de lijst in de factuur bestand over gezet worden naar de juiste uren registratie bestand?

En ik weet niet of dat is precies wat ik zoek, zie je, de bedoeling is dat ik eerst een factuur maak, vervolgens de uren van de week noteer en de factuur + uren overzicht naar de opdrachtgever stuur.

Om het boekhoud technies aan elkaar te kunnen linken wou ik dat het factuurnummer automatisch in de juiste week wordt ingevuld. Ik probeer zoveel mogelijk dingen automatisch te laten verlopen om fouten te voorkomen.
 
Rudi, ik denk dat ik een oplossing heb voor het probleem met meerdere bestanden.

In ieder van de 4 bestanden heb ik een index pagina met daarin een overzicht van het hele jaar (maanden en weken).

Als ik nu gewoon vanuit het factuurbestand een link zou leggen na het printen als pdf naar de index van de eerste uren registratie bestand, dan zou ik in de week werkbladen een link kunnen leggen dat de juiste cel in de index pagina, toch?

Vervolgens zou ik de index pagina van bestand 2 kunnen linken aan de index pagina van bestand 1, zodat alle gegevens exact worden overgenomen naar de tweede bestand, en zo hetzelfde naar de derde en vierde bestanden?

Is dat een idee?

Dan zou ik nog alleen de juiste code moeten hebben die de links maakt na het printen als pdf.

Ik doe in de bijlage een voorbeeld van de index pagina

Het mooiste zou zijn als de code de pdf print maakt en vervolgens een link naar het bestand maakt met naam van het bestand als de link in de juiste cel in de index pagina

Bekijk bijlage Index pagina.xlsm
 
Shalhevet,

Door tijdgebrek heb ik het nog niet kunnen uitwerken maar ik zou het oplossen in de code zelf door gebruik te maken van Select Case.
In Factuur F13 komt het weeknummer te staan. Met Select Case controleer je dit getal en neemt dan de gepaste actie
bv.
In factuur f13 staat 35
Code:
Select Case Sheets("factuurbtwverlegd").Range("F13").value2
    Case 27 To 39
        Workbooks.Open "Uren registratie 3de kwartaal"
        ActiveWorkbook.Sheets(Thisworkbook.Sheets("factuurbtwverlegd").Range("F13").value2).Range("B19") = Thisworkbook.Sheets("factuurbtwverlegd").Range("F14").value
End Select
 
Laatst bewerkt:
Goede morgen Rudi, (als je het in de ochtend leest, haha),

Bedankt voor je reactie.

Is niet erg,ik kan wel voorstellen dat je nog andere dingen te doen hebt behalve het e.e.a. voor mij uit te werken.

Ik ben blij met elke reactie, klein of groot :-)

Wat tijdgebrek betreft begrijp ik het helemaal. Je werkt niet voor mij. Je bied je hulp hier en ik ben blij met elke reactie, klein of groot.

Ik kan je code niet helemaal uit pluizen:

Code:
Select Case Sheets("factuurbtwverlegd").Range("F13").value2
Dat snap ik, er wordt een verwijzigng gemaakt naar het factuurbedrag en zoekt de week nummer in cel F13.

maar wat staat de
voor?


Code:
Case 27 To 39
Zijn dat de range van de weken nummers? Dus dat hij naar weken 27 t/39 in x bestand en bijv. weken 1 t/m 13 in andere bestand?


Code:
        Workbooks.Open "Uren registratie 3de kwartaal"
        ActiveWorkbook.Sheets(Thisworkbook.Sheets("factuurbtwverlegd").Range("F13").value2).Range("B19") =
Dit kan ik ook nog volgen, hij moet het 3d bestand openen, vervolgens de werkblad vinden die correspondeerd met cel F13 van de factuur bestand en dan in cel B19 nestelen.

Code:
Thisworkbook.Sheets("factuurbtwverlegd").Range("F14").value
End Select
Vervolgens zet hij in cel B19 het factuur nummer zoals deze in cel F14 van het factuurbestand vermeld staat.

Heb ik het goed begrepen? De enige wat ik dan niet snap is hoe zorg ik dat hij in de andere bestanden zoekt? moet ik de code 4 keer schrijven met andere verwijzingen?

en waar moet deze code komen te staan? Ik denk dat ik het zou moeten plakken ergens aan mijn print 2 pdf code?
 
Shalhevet,

Value2 maakt geen gebruik van Valuta of Datums als datatype.

Ik denk dat Rudi doelde hierop (verder uitgewerkt)
Code:
Sub Spaarie()
    pad = ThisWorkbook.Path & "\Facturen\_" & ActiveSheet.Range("F14").Value & ".pdf"
    nr = Sheets("factuurbtwverlegd").Range("F13").Value2
    Select Case nr
    Case 1 To 13
        wb = ThisWorkbook.Path & "\Uren registratie 1e kwartaal.xlsm"
        Workbooks.Open wb
        ActiveWorkbook.Sheets("Week" & nr).Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
    Case 14 To 26
        wb = ThisWorkbook.Path & "\Uren registratie 2e kwartaal.xlsm"
        Workbooks.Open wb
        ActiveWorkbook.Sheets("Week" & nr).Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
    Case 27 To 39
        wb = ThisWorkbook.Path & "\Uren registratie 3e kwartaal.xlsm"
        Workbooks.Open wb
        ActiveWorkbook.Sheets("Week" & nr).Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
    Case 40 To 52
        wb = ThisWorkbook.Path & "\Uren registratie 4e kwartaal.xlsm"
        Workbooks.Open wb
        ActiveWorkbook.Sheets("Week" & nr).Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
    End Select
    
    ActiveWorkbook.Close True
    ThisWorkbook.ActiveSheet.Copy
    ActiveSheet.ExportAsFixedFormat xlTypePDF, pad, , True, , , , True
    ActiveWorkbook.Close False
    ThisWorkbook.Save
End Sub
 
Laatst bewerkt:
@ spaarie

:thumb::thumb::thumb:
 
Ik krijg nooit een dikke duim :-( ;)

Jullie zijn geweldig!!!!

Ik krijg een fout melding met het printen als pdf nu.

De fout komt voor in regel:

Code:
    ActiveSheet.ExportAsFixedFormat xlTypePDF, pad, , True, , , , True

In de originele code had ik de regel:

Code:
Dim pad As String
    pad = ThisWorkbook.Path & "\Uren Registratie\" & "_" & "WK" & ActiveSheet.Range("B13").Value & "_" & "2014" & ".pdf"

Zodat Excel wist waar moet hij het pdf document opslaan. Ik zie deze regel nu niet in de nw code.. zal het daar aan liggen?
 
Nee, dit is je orginele regel
Code:
pad = ThisWorkbook.Path & "\Facturen\_" & ActiveSheet.Range("F14").Value & ".pdf"
Dit is om je factuur te exporteren en niet je uren registratie...

Je hoeft trouwens niet persé 'pad' te declareren, maar mag/kan wel natuurlijk...
 
Och sorry Spaarie, ja, ik heb de code net van een andere bestand gekopieerd.

En idd, probleem lag aan de naam. Ik heb vergeten dat ik in de tussen tijd de naam van de map had veranderd naar "verkoop facturen".

Code werkt perfect maar nog de laatste puntje op de i.

Is het mogelijk dat hij cel B19 in de uren registratie automatisch als hyperlink maakt naar het pdf bestand?
 
Zoiets?
Code:
    Select Case nr
    Case 1 To 13
        wb = ThisWorkbook.Path & "\Uren registratie 1e kwartaal.xlsm"
        Workbooks.Open wb
        With ActiveWorkbook.Sheets("Week" & nr)
            .Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
            .Range("B19").Hyperlink.Add .Range("B19"), ThisWorkbook.Path & "\Factuur\_" & .Range("B19") & ".pdf"
        End With
    Case 14 To 26
        wb = ThisWorkbook.Path & "\Uren registratie 2e kwartaal.xlsm"
        Workbooks.Open wb
        With ActiveWorkbook.Sheets("Week" & nr)
            .Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
            .Range("B19").Hyperlink.Add .Range("B19"), ThisWorkbook.Path & "\Factuur\_" & .Range("B19") & ".pdf"
        End With
    Case 27 To 39
        wb = ThisWorkbook.Path & "\Uren registratie 3e kwartaal.xlsm"
        Workbooks.Open wb
        With ActiveWorkbook.Sheets("Week" & nr)
            .Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
            .Range("B19").Hyperlink.Add .Range("B19"), ThisWorkbook.Path & "\Factuur\_" & .Range("B19") & ".pdf"
        End With
    Case 40 To 52
        wb = ThisWorkbook.Path & "\Uren registratie 4e kwartaal.xlsm"
        Workbooks.Open wb
        With ActiveWorkbook.Sheets("Week" & nr)
            .Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
            .Range("B19").Hyperlink.Add .Range("B19"), ThisWorkbook.Path & "\Factuur\_" & .Range("B19") & ".pdf"
        End With
    End Select
 
Spaarie,

Ik krijg een foutmelding

"Deze eigenschap of methode wordt niet ondersteund door dit object"

Met een verwijzing naar regel:

Code:
   .Range("B19").Hyperlink.Add .Range("B19"), ThisWorkbook.Path & "\Verkoop facturen\_" & .Range("B19") & ".pdf"
 
Typo:
Code:
.Range("B19").Hyperlink[COLOR="#FF0000"]s[/COLOR].Add .Range("B19"), ThisWorkbook.Path & "\Verkoop facturen\_" & .Range("B19") & ".pdf"
 
Goh Spaarie dat je dat ziet zeg.... ik heb gezocht op het net en vond vele voorbeelden van de code, op alles lijkt het hetzelfde....dat ene "s" is me niet eens opgevallen.

Rudi, Spaarie, jullie zijn geweldig!!!!

Jij Rudi, hoewel je me had gewaarschuwd was je toch bereid om me een handje te helpen en Spaarie, je hebt het helemaal af gemaakt!!!

Ben zo ontzettend dankbaar en blij hiermee!! Echt toppie :thumb:

Nu nog even uitzoeken hoe ik de cel (met link) ook naar de index pagina kan zetten maar dat zet ik weer in een nieuw vraag ;)

Bedankt tot zover!!! Jullie zijn echt fantastisch :love:
 
Aangezien je voor elke Case exact dezelfde bewerking uitvoert kan je de macro nog wat 'opkuisen'
Code:
Sub Spaarie()
    pad = ThisWorkbook.Path & "\Facturen\_" & ActiveSheet.Range("F14").Value & ".pdf"
    nr = Sheets("factuurbtwverlegd").Range("F13").Value2
    Select Case nr
        Case 1 To 13: kw = 1
        Case 14 To 26: kw = 2
        Case 27 To 39: kw = 3
        Case 40 To 53: kw = 4
    End Select
    Workbooks.Open ThisWorkbook.Path & "\Uren registratie " & kw & "e kwartaal.xlsm"
    With ActiveWorkbook.Sheets("Week" & nr)
        .Range("B19") = ThisWorkbook.Sheets("Factuurbtwverlegd").Range("F14")
        .Range("B19").Hyperlinks.Add .Range("B19"), ThisWorkbook.Path & "\Factuur\_" & .Range("B19") & ".pdf"
    End With
    ActiveWorkbook.Close True
    ThisWorkbook.ActiveSheet.Copy
    ActiveSheet.ExportAsFixedFormat xlTypePDF, pad, , True, , , , True
    ActiveWorkbook.Close False
    ThisWorkbook.Save
End Sub

Als je nu noch een wijziging wil aanbrengen moet je dit maar 1 keer doen ipv 4.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan