Toon posts:

[Excel] Macro automatisch printen alle auto-filter results.

Pagina: 1
Acties:
  • 1.092 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Beste Tweakers,

Elke ochtend krijg ik hier op het werk een excel bestand met daarop een overzicht van alle artikelen
die leveranciers reeds geleverd hadden moeten hebben.

Nu is het zo dat ik door middel van de auto-filter optie per leverancier een overzichtje laat weergeven
met de artikelen die nog niet geleverd zijn. Deze print ik dan uit.
Deze handeling moet ik dus voor elke leverancier herhalen om zo van elke leverancier een uitdraai te krijgen met de te reklameren artikelen.

Nu is mijn vraag of het mogelijk is (en hoe) om een macro te maken die ervoor zorgt dat van elke leverancier een aparte uitdraai gemaakt wordt met 1 druk op de knop?

Alvast bedankt.

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Dat kan. Als ik je post lees heb je niet al teveel ervaring met VBA, dus denk ik dat je het het beste zo kan doen:
-Zet de macro-recorder aan, zet het autofilter aan voor een leverancier en print het blad. Doe nog een leverancier.
-Verzin een manier om alle leveranciers in een lijstje bij elkaar te krijgen.
-Type een macro die ongeveer zo werkt:
For i =1 to aantalleveranciers
leverancier=Verwijzing_naar_plaats_i_in_de_lijst
knip en plak de relevante code uit stap 1
Next i

Voor stap drie zal je misschien wat hulp nodig hebben, maar op zich is dit wel doenlijk (hoewel niet heel erg netjes)

Verwijderd

Topicstarter
Hehe het klopt dat ik inderdaad niet erg veel ervaring heb met VB.
Kom er dan ook nog niet helemaal uit.

Stap 1:
' testing Macro
' Macro recorded 9-1-2006 by Alex
'
' Keyboard Shortcut: Ctrl+b
'
Selection.AutoFilter Field:=4, Criteria1:="603000"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Selection.AutoFilter Field:=4, Criteria1:="604700"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Selection.AutoFilter Field:=4, Criteria1:="611200"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

Stap 2:
Heb een worksheet erbij (Leveranciers genaamd) met daar in kolom A alle leveranciers onder elkaar.

Stap 3:
' testing Macro
' Macro recorded 9-1-2006 by Alex
'
' Keyboard Shortcut: Ctrl+b
'
For i = 1 To 100
Leverancier = Sheets("Leveranciers").Range("A1:A100")
Selection.AutoFilter Field:=4, Criteria1:="603000"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next i
End Sub

Werkt dus niet en heb een aantal dingen veranderd om te proberen of dat wel werkt maar krijg het toch niet aan de praat helaas.
Dingen die ik zelf geprobeerd heb zijn.
Leverancier= veranderd in i= omdat ik dacht dat de i verwijzing daar misschien terug moest komen.
Criteria1:="i".

Je hebt me al wel een stuk op weg geholpen maar kom er toch helaas nog niet helemaal uit.
Misschien kun je me nog iets verder helpen met deze info...
:)

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Allereerst, code kan je kwijt tussen [code=vb][/code] tags.

Ik heb je macro iets aangepast.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub jemacro
Dim leverancier as string 'leg VB uit dat leverancier een variabele is
For i = 1 To 100
    Leverancier = Sheets("Leveranciers").Range("A1").Offset(i-1,0).Value
      'stel leverancier gelijk aan de waarde van de cel die i-1 onder cel A1 staat.
    Selection.AutoFilter Field:=4, Criteria1:=Leverancier
      'gebruik de variabele
    'Sheets("de naam van het uit te printen vel").Calculate 
       'deze kan je gebruiken om het blad opnieuw door te laten rekenen
    Sheets("de naam van het uit te printen vel").PrintOut Copies:=1, Collate:=True
       'de activewindow methode wil wel eens kuren hebben als je meer dan 1 werkblad gebruikt. 
       'dit werkt iha beter.
Next i
End Sub

Probeer het eens (maar verander eerst die 100 even in 5 of zo, dit ding levert dus echt 100 printjes op) en als het vast loopt, post dan (iig) de foutmelding en de regel waarin 'ie vast loopt.

[ Voor 23% gewijzigd door onkl op 09-01-2006 12:04 ]


Verwijderd

Topicstarter
Het werkt!
Onwijs bedankt voor de hulp Onkl!