[EXCEL] [VBA] maximale waarde uit kolom ander werkba

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • CaineS
  • Registratie: Augustus 2017
  • Laatst online: 11-09 12:30
Mijn vraag
Ik heb een tabel in Blad1 waar ik veel gegevens ingevuld heb (53 regels)
vervolgens heb ik een Formulier (Blad2) wat automatisch ingevuld wordt a.d.v. een waarde in vakje "S6".
deze wordt opgezocht door de waarde in "S6" op te zoeken in kolom A:A op Blad 1.

Als ik dit wil printen, moet ik handmatig 1, 2, 3, 4 enz. invullen in S6 en steeds apart op print drukken.
inmiddels heb ik een VBA code gevonden, die werkt, echter stopt deze na een bepaalde waarde onderin de code.

graag zou ik de maximale waarde van Blad1 kolom A:A hier automatisch willen laten invullen. Zodat ik, wanneer ik meer dan 53 regels heb, niet steeds de waarde in de Macro hoef aan te passen.

kunnen jullie mij wellicht helpen??


Wat ik al gevonden of geprobeerd heb

Sub printingv2()
Dim i As Long

i = 1
With Sheets("Blad2")
.Select
Do
.Range("S6").Value = i
If .Range("S6").Value = 0 Then
i = 25
Else
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
i = i + 1
End If
Loop Until i = 53 --> hier zou dan de maximale waarde uit Kolom A:A van blad1 moeten komen.
End With
End Sub

Beste antwoord (via CaineS op 06-06-2019 15:23)


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
CaineS,
Een for-next-lus werkt wel sneller dan een Do-Until-loop, maar bij het aantal rijen waarmee jij werkt zul je dat niet merken. Als je daar aan twijfelt, doe dan maar eens een test met beide macro's door een timer er in te plaatsen.
Maar wil je beslist een for-next-lus gebruiken en dan geen blad te veel afdrukken, dan kun je bv. dit gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Sub afdrukken2()
Dim i As Integer, x As Integer
With Sheets("Blad1")
x = .Range("a" & .Rows.Count).End(xlUp).Row
End With
With Sheets("Blad2")
For i = 1 To x - 1
.Range("S6").Value = i
.PrintOut
Next i
End With
End Sub
Wat betreft je vraag wat 'Leren van vba' betreft: De vba-helpfile van Excel bevat alle opdrachten die er in VBA voor Excel bestaan. De vba-helpfile van Excel is niet hetzelfde als de 'gewone' helpfile van Excel. Beide kun je oproepen door op de F1-toets te drukken; de 'gewone' Excel-helpfile als je een werkblad voor je hebt, en die van vba als je de vba-editor voor je hebt (in die editor kom je door ALT-F11 te drukken). Klik in de vba-helpfile de items in het menu in de linkerkolom open, dan krijg je alle uitleg. Je kunt je daar makkelijk twee jaar mee bezig houden.

[ Voor 32% gewijzigd door dix-neuf op 06-06-2019 15:10 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Ik ben er niet zeker van of ik je goed begrepen heb, maar probeer onderstaande macro.
Doet die niet wat je wil, zeg dan wat er aan schort.
code:
1
2
3
4
5
6
7
8
9
10
11
12
Sub afdrukken()
If Sheets("Blad2").Range("S6").Value = 0 Then
x = 25
Else
x = Sheets("Blad1").Range("A" & Sheets("Blad1").Rows.Count).End(xlUp).Row + 1
End If
i = 1
Do Until i = x
ActiveSheet.PrintOut
i = i + 1
Loop
End Sub

[ Voor 166% gewijzigd door dix-neuf op 29-05-2019 04:39 ]


Acties:
  • 0 Henk 'm!

  • CaineS
  • Registratie: Augustus 2017
  • Laatst online: 11-09 12:30
Heel erg bedankt alvast voor je hulp. alleen werk het nog niet helemaal zoals ik het wil:

deze regel (stond in mijn voorbeeld ook al, net ff anders) zou er eventueel uit kunnen:
If Sheets("Blad2").Range("S6").Value = 0 Then
x = 25

De waarde in "S6" is eigenlijk nooit 0.

verder gaat hij nu (bij 53 regels) wel 53x printen, dus dat gaat goed, alleen blijft de waarde in cel "S6" bij elke print "1" moet bij elke print de waarde in cel "S6" +1 hoger worden.

dus bij de 1e print moet cel "S6" "1" zijn, 2e print "2", 3e print "3" enz.

Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Welk blad wordt er afgedrukt, blad1 of blad2 ?
Vanuit welk blad geef je de printopdracht met behulp van de macro?
En waarvoor dient S6 als je met i al een teller bijhoudt?

Acties:
  • 0 Henk 'm!

  • CaineS
  • Registratie: Augustus 2017
  • Laatst online: 11-09 12:30
Blad 2 wordt afgedrukt.

er worden diverse cellen op Blad 2 (wat eigenlijk een formulier is) ingevuld, vanuit een lijst op blad 1.

Als ik op blad2 bij S6 "3" invul, vult hij het formulier met gegevens welke in diverse kolommen op blad1 regel 3 staan. in rij A:A staan getallen van 1 t/m ... (in dit geval 53). en de waarde in S6 correspondeert weer met de waarde uit de rij met hetzelfde getal. (hierbij heb ik gebruik gemaakt van de formulier "=zoeken()".

als ik nu 53 formulieren wil hebben, moet ik ze steeds elke 53 afzonderlijk afdrukken. met bovenstaande macro, zou ik ze graag met 1 druk op de knop alle 53 hebben... maar tevens ook de uitbreiding, mocht ik 100 of 200 formulieren nodig hebben, dat ik dan niet de macro hoef aan te passen, maar dat hij in Blad1 A;A kijkt hoeveel regels ik heb.

nu heb ik 0,0 verstand van VBA en heb ik met wat gepruts en ge-google bovenstaande code in elkaar geflanst, maar het werkt nog niet zoals ik het wil. ik hoop dat ik bovenstaande een beetje duidelijk verwoord heb. (begrijpend uitleggen vind ik nogal lastig :P)

Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Probeer dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub macro1()
Dim i As Integer, x As Integer
With Sheets("Blad1")
x = .Range("a" & .Rows.Count).End(xlUp).Row
End With
With Sheets("Blad2")
i = 1
Do Until i = x
.Range("S6").Value = i
.PrintOut
i = i + 1
Loop
End With
End Sub

Indien nodig: bij de "Pagina-indeling" vooraf het afdrukbereik juist instellen.

Acties:
  • 0 Henk 'm!

  • CaineS
  • Registratie: Augustus 2017
  • Laatst online: 11-09 12:30
Zo werkt hij! helemaal top! bedankt :D

Acties:
  • +1 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Qua werking maakt het niet uit, maar qua leesbaarheid van je code is het aan te bevelen je lus iets anders te schrijven:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'in plaats van
i = 1
Do Until i = x
.Range("S6").Value = i
.PrintOut
i = i + 1
Loop

'is dit korter en gebruikelijker:

For i = 1 to x
    .Range("S6").Value = i
    .PrintOut
Next

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • CaineS
  • Registratie: Augustus 2017
  • Laatst online: 11-09 12:30
Bedankt!

Is er een bepaalde manier om VBA te leren (voor dummies) of is het een Trail-and-Error princiepe?

Acties:
  • +1 Henk 'm!

  • TheFes
  • Registratie: Juni 2001
  • Laatst online: 17:27
CaineS schreef op dinsdag 4 juni 2019 @ 15:25:
Bedankt!

Is er een bepaalde manier om VBA te leren (voor dummies) of is het een Trail-and-Error princiepe?
Helaas momenteel niet leverbaar bij bol.com
https://www.bol.com/nl/p/vba-voor-dummies/1001004009601958/

Home Assistant configuratie


Acties:
  • 0 Henk 'm!

  • CaineS
  • Registratie: Augustus 2017
  • Laatst online: 11-09 12:30
Lustucru schreef op dinsdag 4 juni 2019 @ 14:53:
Qua werking maakt het niet uit, maar qua leesbaarheid van je code is het aan te bevelen je lus iets anders te schrijven:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'in plaats van
i = 1
Do Until i = x
.Range("S6").Value = i
.PrintOut
i = i + 1
Loop

'is dit korter en gebruikelijker:

For i = 1 to x
    .Range("S6").Value = i
    .PrintOut
Next
heb deze toegepast, hij maakt nu alleen bij 52 regels, 53 printjes.
de tabel bij Blad1 A:A loopt tot regel 52. en bij de laatste print, vult hij bij Blad2 "S6" 53 in.

is dat nog op een bepaalde manier te verhelpen??

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
CaineS,
Een for-next-lus werkt wel sneller dan een Do-Until-loop, maar bij het aantal rijen waarmee jij werkt zul je dat niet merken. Als je daar aan twijfelt, doe dan maar eens een test met beide macro's door een timer er in te plaatsen.
Maar wil je beslist een for-next-lus gebruiken en dan geen blad te veel afdrukken, dan kun je bv. dit gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Sub afdrukken2()
Dim i As Integer, x As Integer
With Sheets("Blad1")
x = .Range("a" & .Rows.Count).End(xlUp).Row
End With
With Sheets("Blad2")
For i = 1 To x - 1
.Range("S6").Value = i
.PrintOut
Next i
End With
End Sub
Wat betreft je vraag wat 'Leren van vba' betreft: De vba-helpfile van Excel bevat alle opdrachten die er in VBA voor Excel bestaan. De vba-helpfile van Excel is niet hetzelfde als de 'gewone' helpfile van Excel. Beide kun je oproepen door op de F1-toets te drukken; de 'gewone' Excel-helpfile als je een werkblad voor je hebt, en die van vba als je de vba-editor voor je hebt (in die editor kom je door ALT-F11 te drukken). Klik in de vba-helpfile de items in het menu in de linkerkolom open, dan krijg je alle uitleg. Je kunt je daar makkelijk twee jaar mee bezig houden.

[ Voor 32% gewijzigd door dix-neuf op 06-06-2019 15:10 ]

Pagina: 1