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

Loop maken in macro Excel

Status
Niet open voor verdere reacties.

Erik191283

Gebruiker
Lid geworden
13 mei 2015
Berichten
49
Voor een facturatiebestandje in excel ben ik op zoek naar de mogelijkheid om alle facturen achter elkaar naar pdf te exporteren.
Om de factuur voor klantnummer 8127 eruit te krijgen gebruik ik de volgende (grotendeels opgenomen) macro:

Code:
Sheets("Factuur").Select
    ActiveSheet.PivotTables("Draaitabel3").PivotFields("groepcode").ClearAllFilters
    ActiveSheet.PivotTables("Draaitabel3").PivotFields("groepcode").CurrentPage = _
        "8127"
    Sheets("Specificatie").Select
    ActiveSheet.PivotTables("Draaitabel1").PivotFields("groepcode").ClearAllFilters
    ActiveSheet.PivotTables("Draaitabel1").PivotFields("groepcode").CurrentPage = _
        "8127"

    Sheets("Factuur").Select
    Dim FacName As String
    FacName = ActiveSheet.Range("H1").Value
'
    Sheets(Array("Factuur", "Specificatie")).Select
    Sheets("Factuur").Activate
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "J:\Locatie\" & FacName & ".pdf" _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=True
    Sheets("Specificatie").Select

Als ik nu de factuur van klant 8128 wil exporteren dan kan ik de volgende code toevoegen:
Code:
Sheets("Factuur").Select
    ActiveSheet.PivotTables("Draaitabel3").PivotFields("groepcode").ClearAllFilters
    ActiveSheet.PivotTables("Draaitabel3").PivotFields("groepcode").CurrentPage = _
        "8128"
    Sheets("Specificatie").Select
    ActiveSheet.PivotTables("Draaitabel1").PivotFields("groepcode").ClearAllFilters
    ActiveSheet.PivotTables("Draaitabel1").PivotFields("groepcode").CurrentPage = _
        "8128"

    Sheets("Factuur").Select

'
    FacName = ActiveSheet.Range("H1").Value
    Sheets(Array("Factuur", "Specificatie")).Select
    Sheets("Factuur").Activate
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "J:\Scans\Synergy_Import\NIET WEGGOOIEN\Macro bestanden\Facturatie Loonloket\" & FacName & ".pdf" _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=True
    Sheets("Specificatie").Select

Op zich werkt dit prima, maar dit wil je niet voor je hele klantenbestand zo doen, laat staan dat je dit bij elke nieuwe klant wil gaan toevoegen (of bij vertrek verwijderen natuurlijk...)

De klantnummers zijn niet aansluitend, maar stel dat ik op het tabblad "klanten" in kolom A een lijst met klantnummers maak die meegenomen moet worden is dit dan in een loop te verwerken zodat de bovengenoemde klantnummers steeds aangepast worden tot het hele lijstje is geweest?

Ik hoop dat het duidelijk is, ik kan het bestand helaas niet posten omdat daar allemaal klantgegevens in staan...
 
Toch is het mogelijk om een voorbeeld bestand te maken. Verwijder de persoonlijke gegevens. Ik heb geen idee hoe je data en draaitabellen er nu uitzien.
 
wordt ongeveer zoiets, maar zoals JVeer aangaf, een voorbeeldje is beter, want onderstaande is los uit de pols
Code:
Sub loopje()
   Set pvtfactuur = Sheets("Factuur").PivotTables("Draaitabel3")   'je ene draaitabel
   Set pvtspec = Sheets("Specificatie").PivotTables("Draaitabel1")   'je andere draaitabel
   Sheets(Array("Factuur", "Specificatie")).Select   'de 2 tabbladen die moeten afgedrukt worden

   For Each it In pvtfactuur.PivotFields("groepcode").PivotItems   'alle items binnen de groepcode aflopen (dezelfde in beide draaitabellen ???)

      With pvtfactuur                            'ene draaitabel
         .PivotFields("groepcode").ClearAllFilters   'vorige filters wissen
         .PivotFields("groepcode").CurrentPage = it.Name   'een bepaalde item in die groepcode
      End With

      With pvtspec
         .PivotFields("groepcode").ClearAllFilters
         .PivotFields("groepcode").CurrentPage = it.Name
      End With

      FacName = Sheets("factuur").Range("H1").Value   'factuurnaam ?
      '
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="J:\Locatie\" & FacName & ".pdf", OpenAfterPublish:=True   'naar pdf

   Next
End Sub
 
Als er nu heel veel facturen zijn worden die allemaal tegelijk geopend in pdf :eek:
Ik zou deze op False zetten.
Code:
OpenAfterPublish:=False
 
Begrijp inderdaad dat een voorbeeld veel fijner werkt. Ik heb het bestand geanonimiseerd en een heleboel data verwijderd.

Tabblad "Facturering stroken per periode" wordt gevuld met een export uit een salarispakket.
Tabblad "Inrichting" bepaald per klant in welke tariefgroep ze vallen. Die tariefgroepen worden verder uitgewerkt op het tabblad prijsafspraken.

Waar het nu dus om gaat is dat het tablad "Factuur" en het tabblad "Specificatie" dus worden geëxporteerd waarbij alle voorkomende klantnummers (zie kolom I op tabblad "Prijsafspraken") als filter worden gebruikt in de draaitabellen op "Factuur" en "Specificatie". Door het verwijderen zijn inmiddels niet alle klantnummers meer aanwezig, maar normaal zijn die er dus wel.

Dat de facturen nu allemaal geopend worden klopt inderdaad, was een bewuste keuze om de eerste keer even te controleren of het goed gaat, maar dat moet inderdaad naar "false" want daar gaan we niet blij van worden...

Ik hoop dat het zo allemaal iets duidelijker is en in elk geval vast bedankt voor de energie die jullie er in steken!
 

Bijlagen

  • Kopie facturatie.xlsm
    399,7 KB · Weergaven: 30
beide draaitabellen hebben dezelfde bron (wel niet netjes, het volledige werkblad, +1.000.000 rijen), dus ook dezelfde groepcodes.
Vooraan in de macro worden alle groepcodes verwijderd, dus bijgevolg zijn de oude weg en de nieuwe niet.
Die worden daarna in een loopje afgelopen.
 

Bijlagen

  • Kopie facturatie.xlsm
    406,6 KB · Weergaven: 56
Beide draaitabellen hebben inderdaad dezelfde bron en moeten inderdaad op dezelfde groepcodes worden doorlopen. Er zijn inderdaad nog een aantal zaken niet zoals het zou moeten (o.a. bereik van de draaitabellen). Het is bestand wat ik inmiddels een aantal jaar terug heb gemaakt, toen was ik al heel erg blij dat ik wist hoe je een draaitabel maakte, inmiddels is de kennis iets meer, dus er zit nog wat "opknap" werk in het bestand en zolang het werkt zoals je wil begin je daar meestal niet aan...

Maar enorm bedankt want het werkt nu inderdaad zoals ik wilde!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan