Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Excel 2007] Macro voor het automatisch uitprinten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een macro te maken om bepaalde gegevens uit te printen. Ik heb nu zelf een macro ontwikkeld die volgens mij inefficiënt is.

Situatie:
In tabblad C wordt gezocht met een formule verticaal zoeken. Deze gegevens worden uit andere tabbladen gehaald. De range van de te zoeken en dus uit te printen ‘overzichten’ wordt gegeven in cel B1 (beginwaarde) en cel B3 (eindwaarde). Op dit moment wordt elk afzonderlijk overzicht handmatig uitgeprint. Dus stel dat overzicht (6) uitgedraaid moet worden dan vult men in cel B1 een 6 in wordt deze uitgedraaid. Voor overzicht 7 wordt dan in B1 een 7 ingevuld en dan wordt weer handmatig op printen geklikt.
Indien een overzicht moet worden uitgeprint worden dan worden de volgende handelingen uitgevoerd:
- Het invoeren van het cijfer van het overzicht in cel B1. Met behulp van de formule verticaal zoeken worden dan de juiste gegevens weergegeven.
- Bestand handmatig uitprinten.

Het probleem van mijn macro is dat bij het ontstaan van nieuwe overzichten handmatig de vier regels met een nummer moet worden ingevoerd in de macro. Ik wil dus dat de range aangegeven kan worden welke overzichten uitgeprint moeten worden. Indien ik bijvoorbeeld B1:10 en B3:30 invul moet alles tussen 10-30 uitgedrukt worden. Indien ik in cel B3 bijvoorbeeld 45 invul moet de macro 10-45 uitprinten.

Is dit mogelijk met behulp van een macro?

Huidige macro (print overzicht 2 – 34 op de juiste wijze uit):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub Macro4()
'
' Macro4 Macro
'

'
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("B2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("B2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "4"
    Range("B2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "5"
    Range("B2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "6"
    Range("B2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "7"
    Range("B2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "8"
    Range("B2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
      
End Sub


En zo door tot 34....

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

offtopic:
Ontwikkeld of opgenomen ;) Kijk in %God%'snaam alsjeblieft wat een loop is en gebruik geen Select, ActiveWindow of SelectedSheets maar roep de printout-functie direct aan (in de loop).

Je kunt het aantal sheets gewoon opvragen. En de inhoud vd cellen kan je gewoon met cells(i,j).value uitlezen, beide basisfunctionaliteit waarvan ik aanneem dat je dat al hebt geleerd/gelezen in een tutorial. Kortom: ik snap niet wat de vraag nu is :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Topicstarter
Zoals ik al zei heb ik niet veel kennis van VBA.
Ik heb nu doorgelezen wat loops zijn maar ik begrijp niet hoe ik deze actie in een loop kan verwerken met een printfunctie. Op internet zag ik een voorbeeld van een Do-while loop. Volgens mij is dit de juiste loop om die range uit te voeren. Ik gebruik zelf de Nederlandse versie dus volgens mij werken die Engelse termen deels niet?

Voorbeeld Do-while loop:
Sub DoWhileDemo()
Do While ActiveCell.Value <> Empty
ActiveCell.Value = ActiveCell.Value * 2
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Ik kom er echter niet uit Is er iemand die wat tips kan geven.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Hoewel het vast negatief over komt bedoel ik het goed: koop een boek en ga het in het zonnetje lezen (en oefenen en begrijpen). Gezien de hoeveelheid Office-vragen die je stelt is dat erg nuttig. Op basis van macro-opneemknoppen, Google-hits en af en toe een tip hier leer je de verkeede dingen aan en kost het op termijn heel veel meer tijd :)
Je wilt hoe dan ook niet Google / random stukjes van het web als bron nemen om te leren. Lees dan liever gewoon F1 -> inhoudsopgave -> van begin tot eind.

Je kan een FOR loop gebruiken. Overigens Range("B1") geen range omdat je geen bereik zult hebben dat je B1 noemt. Je bedoelt dus vast gewoon cells(1,2). Ook betreft het zo te zien steeds gewoon dezelfde sheet, zodat Range("B2").Select en ActiveWindow.SelectedSheets.PrintOut Copies:=1 nogal onhandig is, het is immers nog steeds dezelfde sheet.

En dat krijg je dus een loop van i = minwaarde tot en met maxwaarde met
Cells(1,2).FormulaR1C1 = i
sheets(1).printout
en terug in de loop

Waarbij minwaarde = de waarde van de cell waar het minimum staat en maxwaarde = de waarde waar het maximum staat.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)