vanuit een matrix lijsten printen

Status
Niet open voor verdere reacties.

Oude leerling

Gebruiker
Lid geworden
30 aug 2010
Berichten
566
Geacht forum,

Ik ben er al een tijdje mee bezig maar zie er geen oplossing voor.
Het is voor mijn biljart clubje.
Als in G8 een “1” staat , dan moeten de personen welke overeen komen
met de cijfers in rij3 , te beginnen met L3-M3 en N3-O3 verplaatst worden
naar Blad2 en daarna uitgeprint worden. (zie ook het stukje macro wat ik al gemaakt heb)
Daarna het volgende blok van 4 stuks t.w. P3-Q3 en R3-S3 , printen enz.
totdat de gehele rij , rij 3 , gedaan is.
Datum en partijnummer op de tellijsten plaatsen is wel gelukt. ( zie de bijlage)
Is dit niet teveel gevraagd??
Vriendelijke groet Jaap
 

Bijlagen

Probeer het zo eens.

Code:
Sub VenA()
Dim j As Long, jj As Long, jjj As Long, c00 As String, ar, ar1
With Sheets("Blad1")
  ar = .Cells(1).CurrentRegion
  ar1 = .Cells(1, 10).CurrentRegion
  Sheets("Blad2").Cells(4, 3).Resize(, 11) = Array("Datum", ar1(.[g8] + 2, 2), , .[g8].Value, , , , "Datum", ar1(.[g8] + 2, 2), , .[g8].Value)
  For j = 3 To UBound(ar1, 2) Step 4
  c00 = ""
    For jj = 0 To 3
      If j + jj <= UBound(ar1, 2) Then
      For jjj = 2 To UBound(ar)
          If ar(jjj, 1) = ar1(.[g8] + 2, j + jj) Then c00 = c00 & IIf(jj Mod 2 = 0 And jj > 0, "|", "") & ar(jjj, 3) & "||" & ar(jjj, 4) & "|"
      Next jjj
      Else
        c00 = c00 & "||||||"
    End If
    Next jj
    With Sheets("Blad2")
      .Cells(6, 1).Resize(, 13) = Split(c00, "|")
      .PrintPreview
    End With
  Next j
End With
End Sub
 
Dit lijkt me voldoende:

Code:
Sub M_snb()
  sn = Blad1.Range("L2:AO2").Offset(Blad1.Cells(8, 7))
  sp = Blad1.Cells(2, 1).CurrentRegion
  
  For j = 1 To 28 Step 4
     Blad2.Range("A6:M6") = Array(sp(sn(1, j), 3), "", sp(sn(1, j), 4), sp(sn(1, j + 1), 3), "", sp(sn(1, j + 1), 4), "", sp(sn(1, j + 2), 3), "", sp(sn(1, j + 2), 4), sp(sn(1, j + 3), 3), "", sp(sn(1, j + 3), 4))
     Blad2.PrintOut
  Next
End Sub
 
Laatst bewerkt:
VenA ,

Jou oplossing geeft de juiste namen op de tellijsten.
Ik krijg alleen bij ieder blok een afdrukvoorbeeld en moet dan zelf op afdrukken klikken.
Is dit nog te wijzigen zodat er meteen geprint word?

SNB ,
Jou oplossing geeft niet altijd de juiste namen op de Tellijsten
Ik denk dat het komt omdat je aangenomen heb dat de getallenreek altijd is zoals in Partij 1 .
Kijk maar , dat is niet overal zo.
Hij print wel meteen , vind ik wel fijn.
Kan je de code nog aanpassen zo dat hij echt naar de cijfers kijkt welke in de cellen van de matrix staan?


Ik vind het verschrikkelijk knap wat jullie gedaan hebben.
Daar ben ik nog lang niet aan toe met mijn boekje van Wim de Groot , "Macro's programmeren met VBA"

Ik leer echter veel op dit forum en zal dan hoe dan ook de codes proberen te begrijpen, dank je wel voor alle moeite

Vriendelijke groet , Jaap
 
@Jaap

Je verstrekt te weinig informatie.
Wanneer gaat het volgens jou niet zoals je wil ?

Ik vergat te vermelden dat je natuurlijk eerst cel D1 leeg moet maken. ( je doet er sowieso verstandig aan alle gegevens in kolom A t/m D in cel A1 te laten beginnen).
 

Bijlagen

Laatst bewerkt:
VenA ,

Helemaal goed


Snb ,

Gegevens 'Blad1" kolom A t.e.m. D verplaatst naar te beginnen in A1 en nu is alles goed.

Kunnen jullie mij een studieboek aanbevelen waarin de onderwerpen uit u beide codes , (hogeschoolwerk)
zoals door u gebruikt , in behandeld worden.

Nogmaals bedankt voor de oplossingen

Vriendelijke groet , Jaap
 
snb ,

Er gebeurd iets voor mij onverklaarbaar
Als ik de bladen een andere naam geef en de zelfde namen doorvoer in de codes
dan krijg ik de foutmelding "Object vereist""

Waar kan dat nou in zitten?


sn = Rooster.Range("L2:AO2").Offset(Rooster.Cells(8, 7))
sp = Rooster.Cells(2, 1).CurrentRegion

For j = 1 To Rooster.Range("L4").Value Step 4
Tellijsten.Range("A6:M6") = Array(sp(sn(1, j), 3), "", sp(sn(1, j), 4), sp(sn(1, j + 1), 3), "", sp(sn(1, j + 1), 4), "", sp(sn(1, j + 2), 3), "", sp(sn(1, j + 2), 4), sp(sn(1, j + 3), 3), "", sp(sn(1, j + 3), 4))
Tellijsten.PrintPreview
Next
 
Er gebeurt volgens mij niets onverklaarbaars.

Je hebt bladnamen en codenamen.
Het aardige is dat, als je de namen van de sheets verandert, je dezelfde codenamen kunt blijven gebruiken.

Dus wees slim: verander niets aan de code.
 
Nou werkt het weer
Daar had ik nog nooit van gehoord
Heb altijd gedacht dat de codenaam en bladnaam altijd hetzelfde moesten zijn
Niet dus.
Wat moet je toch veel weten wil je VBA een beetje beheersen.
Bedankt voor de les.

Jaap
 
In het VBEditorscherm zie je bij de eigenschappen van het werkblad (tevoorschijn te toveren met F4 ) de eigenschap '(Name)' (dus met de haken eromheen). Dat is de 'codename' (die kun je ook wel VBA-naam noemen); de eigenschap 'Name' is de bladnaam die je als gebruiker in de tab onderaan in het werkbladscherm kunt wijzigen.
De 'Codename' (=VBA-naam) kun je alleen maar wijzigen in de VBEditor of met een macro. De 'gewone' gebruiker, die alleen maar het werkbladscherm (= User Interface) ziet, kan daar de 'Codename' niet wijzigen.
Als je in een macro verwijst naar een werkblad met de naam "snb" gebruik je daarvoor Sheets("snb"); als het werkblad met de naam "snb" de Codename 'Sheet7' heeft kun je in een macro naar dat werkblad verwijzen met de code Sheet7. In zo'n geval zijn Sheets("snb") en Sheet7 equivalenten: ze verwijzen naar hetzelfde werkblad.

Code:
sheets("snb").cells(1)=Sheet7.cells(1)
 
snb ,

Je bent een fantastisch iemand.
Heel veel kennis , gecombineerd met het aan voelen van mijn probleem betreffende codenamen en bladnamen.
De moeite nemend om het te kunnen en te willen uitleggen. Fantastisch
Ik vond dit een heel interessante sessie.
Dank je wel.

Vriendelijke groet , Jaap
 
@OL

Dankjewel.

Misschien leest Wim de Groot wel mee.... ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan