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

Met een macro regels weg laten

Status
Niet open voor verdere reacties.

Poetsie66

Gebruiker
Lid geworden
15 jul 2009
Berichten
26
Hallo,

Ik heb een cijferlijst gemaakt die op scholen ingezet kan worden.
Om ervoor te zorgen dat mijn (niet zo digitale) collega's zo gemakkelijk mogelijk kunnen werken met dit bestand wil ik er een macro aan toevoegen.
Mijn kennis van macro's is echter niet zo groot.
Wat ik wil is het volgende:
In de bijlage zit een voorbeeld scherm. Bovenin staat het getal 5. Dit getal staat voor het aantal rijen dat in de kolom ingevuld moeten worden.
Wat ik dan wil is dat de rijen 6 t/m 20 verborgen worden. En dat niet alleen op tabblad 1, maar ook op de volgende bladen.
Het probleem waar ik mee zit is dat het getal bovenin elke keer anders kan zijn, en ik dus ook elke keer een ander aantal rijen nodig heb.
Is dit te realiseren? En zo ja, hoe?

Ps. Ik stel het zeer op prijs als iemand mij uit kan leggen hoe het werkt i.p.v. de macro aan het scherm toe te voegen. Ik heb namelijk geen enkel idee hoe je zo'n macro moet/kunt lezen.

Alvast bedankt!
Erik


Bekijk bijlage macro voorbeeld.xls
 
Kopieer en plak onderstaande code achter de Blad1 in je voorbeeld
(ALT+F11 > dubbelklik op blad1 > plakken)

Uitleg zal in het groen verschijnen...
Code:
Private Sub Worksheet_Change(ByVal doel As Range)
If doel.Address = "$L$1" Then 'als L1 veranderd wordt
Cells.EntireRow.Hidden = False 'laat alles eerst zien

If doel > 0 Then 'als L1 groter is dan 0

For Each sh In ThisWorkbook.Sheets 'voor elke sheet in dit bestand
If sh.Name <> "" Then 'als de naam van de sheet groter of kleiner is dan niks
erij = 6 + doel.Value 'eerste rij vaststellen die verborgen moet worden
sh.Range(sh.Cells(erij, 1), sh.Cells(25, 1)).EntireRow.Hidden = True 'verbergen
End If
Next sh 'volgende sheet

End If
End If

End Sub
 
Laatst bewerkt:
als je deze achter thisworkbook zet dan reageert hij ook op elk blad

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Address = "$L$1" And Target.Value <> "" Then
        aantal = Target.Value
        For Each Sht In ThisWorkbook.Sheets
            If Target.Value < 20 Then
                Sht.Rows("6:25").Hidden = False
                Sht.Rows(6 + aantal & ":25").Hidden = True
            End If
        Next
    End If
End Sub

na nog een keer lezen zou het ook dit kunnen zijn

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Address = "$L$1" And Target.Value <> "" Then
            aantal = Target.Value
            If Target.Value < 20 Then
                activesheet.Rows("6:25").Hidden = False
                activesheet.Rows(6 + aantal & ":25").Hidden = True
            end if
    End If
End Sub

Niels
 
Laatst bewerkt:
@Niels: De target staat maar alleen op de 1e sheet. Moet je de address dan ook niet naar die specifieke sheet zetten?
Code:
If Not Intersect(Target, Sheets("Blad1").Range("L1")) Is Nothing Then

Of zo iets???
 
Beste Spaarie,

Jouw code werkt gedeeltelijk! En ik snap hem (grotendeels) dat is al heel wat!
Als ik 1 keer het nummer aanpas werkt het voor alle tabbladen. Als ik vervolgens nog een keer het nummer verander, dan verandert het wel op het eerste tabblad maar niet op de andere bladen.
En dan het volgende: ik heb een bestand met ongeveer 100 tabbladen. Maar deze formule moet alleen werken voor de eerste 22. hoe doe ik dat?
En dan ben ik nog wat bezig geweest.
Het voorbeeld bevat nu mijn uiteindelijke opmaak en schema. (had ik beter eerder kunnen doen)
De cellen V1 en W1 kunnen variabele getallen bevatten. Zoals eerder alleen cel L1 was. V1 geld voor de rijen 6 t/m 45 en W1 voor de rijen 50 t/m 89
Ik dacht er met de onderstaande code te komen, maar dat blijkt toch niet zo te zijn. Wat doe ik fout?

Code:
Private Sub Worksheet_Change(ByVal doel As Range)
If doel.Address = "$V$1" Then 'als V1 veranderd wordt
Cells.EntireRow.Hidden = False 'laat alles eerst zien

If doel > 0 Then 'als V1 groter is dan 0

For Each Sh In ThisWorkbook.Sheets 'voor elke sheet in dit bestand
If Sh.Name <> "" Then 'als de naam van de sheet groter of kleiner is dan niks
erij = 6 + doel.Value 'eerste rij vaststellen die verborgen moet worden
Sh.Range(Sh.Cells(erij, 1), Sh.Cells(45, 1)).EntireRow.Hidden = True 'verbergen

If doel.Address = "$W$1" Then 'als W1 veranderd wordt
Cells.EntireRow.Hidden = False 'laat alles eerst zien

If doel > 0 Then 'als W1 groter is dan 0

For Each Sh In ThisWorkbook.Sheets 'voor elke sheet in dit bestand
If Sh.Name <> "" Then 'als de naam van de sheet groter of kleiner is dan niks
erij = 50 + doel.Value 'eerste rij vaststellen die verborgen moet worden
Sh.Range(Sh.Cells(erij, 1), Sh.Cells(89, 1)).EntireRow.Hidden = True 'verbergen
End If
Next Sh 'volgende sheet

End If
End If

End Sub
 

Bijlagen

Is het 2e blad een vervolg op de 1e of een uitbreiding? Ik neem aan een vervolg omdat je weer bij 1 begint te tellen...
Dan zou je de bladen ook naast elkaar kunnen zetten en de afdrukbereik bepalen (zie voorbeeld).

Tevens in voorbeeld aangepast dat de macro alleen wordt uitgevoerd op de 1e 22 bladen.
 

Bijlagen

Het tweede tabblad is exact hetzelfde als het eerste qua opmaak.
Als ik dus op het eerste tabblad die getallen invul, moet dat op de eerste 22 tabbladen veranderen. En als het getal verandert dan moet het overal veranderen.
Ik heb ze niet bij elkaar zodat je gemakkelijk kunt wisselen tussen de vakken. Het 23e tabblad is dan een totaaloverzicht van alle gemiddelde cijfers, en de tabbladen daarna zijn weer andere overzichten met alle cijfers per leerling.
 
Dat bedoelde ik niet....
Op je 1e tabblad heb je 2x een 'rapport'/lijst met de cijfers 1 t/m 40. Deze kun je dan toch naast elkaar zetten (zoals in mijn voorbeeld) dan hoef je niet 2 cellen te veranderen met aantallen (in jouw voorbeeld V1 en W1).

In de laatste bijlage van mij, daarin veranderd het opgegeven aantal op het 1e tabblad (V1) op de eerste 22 tabbladen. Het geen wat daarvoor fout ging, dat het 2e en overige tabbladen niet mee veranderde, is aangepast.

Volgens mij is je vraag dus hierbij opgelost... of niet?
 
Ik snap wat je bedoeld.
De twee lijsten staan onder elkaar zodat een combinatiegroep (groep 7 en 8 bij elkaar bijvoorbeeld) gescheiden kan blijven. Het komt regelmatig voor dat er bijvoorbeeld 14 in groep 7 zitten en 18 in groep 8. De lijsten zijn dan niet even groot. Het kan ook dat je geen combinatiegroep hebt, en dan wil ik niet een lege lijst ernaast hebben staan.
Mijn idee is dan om de lijsten onder elkaar te zetten. En dan dus wel, zoals in mijn voorbeeld V1 en W1. Maar ik begrijp dat dat niet mogelijk is?
 
Bijna alles is mogelijk :)
Maar ga het natuurlijk niet ingewikkelder maken dan het al is en dat begint al in de opmaak. Vandaar mijn vragentekens hierbij.

In de bijlage met bladeren onder elkaar en aanpasbare regels vanuit V1 en W1. Deze zullen alleen gelden op de eerste 22 sheets...
 

Bijlagen

Hartstikke bedankt!
Hij werkt! En ik begrijp nu een beetje hoe het werkt met macro's!
Ik heb hem zelfs nog een klein beetje aangepast!
Voor W1 kan ik nu ook 0 invullen. En als ik dat dan doe dan verdwijnt dat hele tweede schema. En wanneer ik dan een getal hoger dan 0 invul komen ook de kopregels weer terug!

Ik zal de vraag op beantwoord zetten!

Nogmaals bedankt!
Groeten,
Erik
 
Graag gedaan, maar niet te hard van stapel lopen he... ;)
Deze macro wordt begrepen, maar de wereld van VBA is erg groot :)

Succes ermee!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan