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

regel verbergen met macro

Status
Niet open voor verdere reacties.

1107972

Gebruiker
Lid geworden
5 mei 2004
Berichten
186
Hallo,

op het gebied van macro's ben ik niet echt een ster (lees noob) en tot nu toe heb ik me kunnen redden met het ontwijken ervan maar nu is het toch zover denk ik.

Ik heb de volgende situatie:

In het werkblad is de regel 2 verborgen.
Als de uitkomst van cel A1 "8" is dan moet regel 2 zichtbaar gemaakt worden. Zo niet dan moet hij verborgen blijven.

Stel dat cel A1 later in het proces weer een andere waarde krijgt dan "8" dan moet een macro regel 2 weer verbergen.

Mijn gevoel zegt dat ik het zo moet met de volgende formule in cel A2

ALS(A2=8;uitvoeren macro 1;uitvoeren macro 2)

macro 1= regel 2 zichtbaar maken
macro 2= regel 2 verbergen

De vraag blijft dan wel welke macro ik moet gebruiken en of dit allemaal mogelijk is?

alvast bedankt
 
Via onderstaande macro moet het lukken.
Zodra je je verplaatst door het werkblad wordt de macro geactiveerd.

(zie bijlage om te zien waar je de macro moet neerzetten)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [A1] = 8 Then
Rows("2:2").EntireRow.Hidden = True
Else
Rows("2:2").EntireRow.Hidden = False
End If
End Sub
 
Laatst bewerkt:
Ik ga het proberen bedankt voor de snelle reactie, was er zelf denk ook bijna al uit, maar dan via een andere weg, namelijk het toepassen van een filter, alle regels met 8 zichtbaar maken en die met een 9 niet.

Denk dat ik die uiteindelijk verder ga uitwerken, omdat bestanden met macro's nog wel eens problemen kunnen geven met beveiligen, maar ik ga je oplossingen zeker proberen.

thanks
 
Als er meerdere regels zijn die verborgen moeten worden dan is het inderdaad beter om een filter te gebruiken.
 
Heb eerst mijn oplossing geprobeerd, maar het werkt niet zo als ik dacht dat het zou werken daarom wil ik je toch nog een keer om hulp vragen.

De werkelijke situatie word nu zoiets:

als in rij Q de waarde -10 voorkomt in een bepaalde regel moet die regel verborgen worden. In alle andere gevallen zichtbaar. Hopelijk vraag ik niet teveel moeite.

Alvast bedankt.

(ps, ben de rest van de avond weg, dus jullie mogen de tijd nemen)
 
Dan zou ik toch gebruik maken van Filter.
Dus Data, Filter, Autofilter

Op de pijl klikken en kiezen voor Aangepast

Klik op de pijl linksboven en selecteer "is niet gelijk aan"
Klik vervolgens op de pijl van het keuzemenu er naast en type in: -10

Klik op OK

(zie eventueel bijlage)
 
Laatst bewerkt:
Ik heb geprobeerd met de filter maar het probleem is dat het niet echt dynamisch werkt in mijn geval.

Het excel bestand gaat over uitslagen van wedstrijden, bij gelijk spel zou er een regel moeten komen die om een eindstand van de verlenging vraagt. Is die ook gelijk dan om strafschoppen.

Op het moment dat dus een gelijk spel ingevuld word moet direct de regel voor de verlenging verschijnen. Bij de filter optie gebeurt dat niet.

Ik heb het echter ook met je macro geprobeerd en die doet het perfect. Dus ik dacht ik kopieer die macro en wijzig dan enkel de regel nummer. Omdat het maar uiteindelijk om ongeveer een 30 macro's zou gaan zou het nog wel te overzien zijn.

Maar als ik dat doe krijg ik een conflict in verband met een dezelfde naam. Waar kan ik die namen wijzigen. Of is het mogelijk er 1 macro van te maken zoals ik al eerder aangaf aan de hand van de waarde in rij Q. met als gevolg dat dan de betreffende regel verborgen word of juist zichtmaar gemaakt moeten worden.

deze macro gebruik ik nu:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [Q15] = -9 Then
Rows("15:15").EntireRow.Hidden = True
Else
Rows("15:15").EntireRow.Hidden = False
End If
End Sub

Alvast bedankt.
 
1107972 zei:
Het excel bestand gaat over uitslagen van wedstrijden, bij gelijk spel zou er een regel moeten komen die om een eindstand van de verlenging vraagt. Is die ook gelijk dan om strafschoppen. Op het moment dat dus een gelijk spel ingevuld word moet direct de regel voor de verlenging verschijnen
Hier kan ik niets mee als ik niet zie hoe dat in je werkblad er uitziet.

1107972 zei:
Maar als ik dat doe krijg ik een conflict in verband met een dezelfde naam. Waar kan ik die namen wijzigen.
Een beetje vreemd dat als je al 30 macro's voor je toepassing gebruikt (wat ik toch wel veel vind) je niet weet waar die staan. Kies Extra - Macro - Visual Basic Editor. De werkbladmodules vind je door te dubbelklikken op Blad1, Blad2, enz. De gewonde modules door te dubbelklikken op Module1, Module2, enz. Dus op die plaatsen kun je zien of er meerdere macro's met dezelfde naam voorkomen.

1107972 zei:
Of is het mogelijk er 1 macro van te maken zoals ik al eerder aangaf aan de hand van de waarde in rij Q. met als gevolg dat dan de betreffende regel verborgen word of juist zichtmaar gemaakt moeten worden.
Of van meerdere macro's er 1 gemaakt kan worden, daarvoor zouden we moeten zien hoe al die macro's er uitzien.

Tenslotte een wat meer concrete vraag om naar een oplossing toe te werken.
Ik neem aan dat je met rij Q, kolom Q bedoelt. Als dat het geval is: moet rij 15 alleen verborgen worden als Q15 de waarde -10 heeft, of ook als in andere kolommen in rij 15 de waarde -10 voorkomt? Indien het laatste, welke kolommen worden door je toepassing gebruikt? Toch niet alle 256 neem ik aan? Want als je een macro in een werkbladmodule plaatst en er moeten voortdurend al die kolommen gecontroleerd worden, dan werkt dat enorm vertragend !
 
Dankje voor de input franc,

Toen ik jou berichtje las ging er bij mij een lampje branden wat ik fout deed. Ik had namelijk de complete code gekopieerd. Ik moest eigenlijk gewoon enkel de code tussen if en end if kopieren en die weer tussen sub invoegen. Nu doet hij het wel goed.

Tenslotte om toch nog jou laatste vraag te beantwoorden, rij Q is inderdaad kolom Q (:o )
rij 15 moet verborgen worden als cel Q15 gelijk aan -10 is. Stel dat ook cel Q16 gelijk is aan -10 dan moet ook rij 16 verborgen worden.

In het betreffende blad staat -10 gelijk aan = de uitslag van het onderdeel (in de bovenliggende rij) is niet beslissend waardoor het nieuwe onderdeel in de huidige rij uitsluitsel zou moeten geven.

Onderdelen zijn in dit geval bijvoorbeeld wedstrijden, verlenging of strafschoppen.

Maar zoals ik al zei is het opgelost als zou het warschijnlijk veel simpeler kunnen, voor degene die interesse heeft het ik het bestand bijgevoegd.

Als iemand fouten erin ziet hoor ik het natuurlijk graag.
 

Bijlagen

Prachtig dat je het zelf hebt kunnen oplossen.
Mijn complimenten voor de vormgeving, is mooi om te zien.
Nu je werkmap er naar tevredenheid uitziet, heb ik er ook niet meer grondig naar gekeken. Slechts enkele (maar geen wezenlijke) opmerkingen:
1. Je kunt naar mijn mening in plaats van Worksheet_Selectionchange beter kiezen voor Worksheet_Change.
2. In plaats van Rows("15:15").EntireRow.Hidden = True
kun je ook gebruiken: Rows(15).Hidden = True
3. Je kunt het best de werkbladen beveiligen.
 
Dankje voor je reactie Franc,

1. Zal ik zeker wijzigen, jij hebt er meer verstand van dus waarom zou ik dat negeren.
2. Goed idee, zal weer schelen in de ruimte van het bestand.
3. Heb ik al geprobeerd, in de bladen met de groepindeling en de groepwedstrijden ging dat goed, echter bij het knock-out systeem werkte de macro's niet meer zodat er bj gelijk spel een nieuwe regel zichtbaar werd. Maar misschien lossen jou veranderingen dat op.

Nog 1 vraagje, ik had het idee om de kolommen die ik gebruik voor berekening te laten verbergen als de waarde van cel A1 in blad 1 "0" is. Als ik dan zie cel zou wijzigen naar "1" dan zouden die kolommen weer zichtbaar worden. Hierdoor kan ik makkelijk switchen van zonder en met, plus dat het voor anderen moeilijker word op stiekem toch handmatig die kolommen zichtbaar te maken. Ik had dit geprobeert door "Rows" in "Columns" te veranderen, echter die werkte niet, krijg gelijk weer een foutmelding.

Eric
 
Deze code verbergt die kolommen:

If Worksheets("Groeps Indeling").Range("A1").Value = 1 Then
Worksheets("2de ronde").Columns("Q:X").Hidden = False
Else
Worksheets("2de ronde").Columns("Q:X").Hidden = True
End If
 
Laatst bewerkt:
Ik heb je adviezen verwerkt en doorgevoerd. Vooral het wijzigen van selectionchange in change is een vooruitgang. Alles gaat nu veel soepeler. De macro voor de kolommen heb ik er ook in verwerkt en die werkt ook fantastisch.

Echter ik krijg nog steeds een confilt als ik de werkbladen gaat beveiligen (alle optie zijn aangevinkt). Op het moment dat ik een waarde invul bij een eindstand krijg ik de volgende foutmelding:

Fout 1004 tijdens uitvoering:

Eigenschap Hidden van klasse Range kan niet worden ingesteld

Met als gevolg dat uiteindelijk er ook geen extra regel bij komt bij een gelijkspel.

Vink ik inhoud niet niet dan krijg ik geen foutmelding maar de nieuwe regel verschijnt nog steeds niet bij een gelijkspel.

Iemand een idee om het blad toch nog te kunnen beveiligen?

nog bedankt voor je fantastische tips franc.

Eric
 
Voeg onmiddellijk na de eerste regel in (dus na: Private sub...)
ActiveSheet.Unprotect
en als voorlaatste regel (dus juist boven: End Sub):
ActiveSheet.Protect
 
Laatst bewerkt:
En wat ik nog vergat:
Als je bovenstaande al hebt uitgevoerd,
voeg weer in onmiddellijk na de eerste regel:
Application.screenupdating = False
en als voorlaatste regel (dus boven End Sub):
Application.screenupdating = True

Franç.
 
Hallo Franc,

bedankt voor die 4 regels, nu werkt de beveiliging wel goed zoals het moet bij de 2e ronde.
Voor het verbergen van de kolommen waar ik berekening in maak heb ik dat ook gelijk ingevoerd. Behalve activesheet moest ik daar dan ook alle worksheets toevoegen. In neem aan dat dat correct is want het werkt nu wel goed.

Ben ondertussen weer tegen een volgende vraag aangelopen uit luiheid.

Ben aangekomen met het maken van een blad voor het maken van voorspellingen.

Versimpelde versie:
In kolom A staat bijvoorbeeld de uitslag van de toto.
In kolom B staat de toto voorspelling van een personage.
In kolom C staat het resultaat van de voorspeller; =ALS(A1=B1;3;0)
In kolom D staat dan weer een nieuwe voorspelling van een nieuw personage
In kolom E staat het resultaat van de nieuwe voorspeller; =ALS(A1=D1;3;0)
enz...

Als ik heel lui wil zijn en cel C1 kopieer naar E1 dan verandert de formule naar =ALS(C1=D1;3;0)

Wat is vragen wil is of er dus een optie is om bij het kopieren van een formule naar een andere cel dat een deel van de formule niet gewijzigd word, in dit geval de referentie naar cel A1. Mijn gevoel zegt dat het iets is met het dollar teken.

Dit zou dan ook moeten voor de opmaak van een cel, in mijn geval is die nu:
formule is =D3=0

Hopelijk begrijp je een beetje wat ik bedoel.

Alvat bedankt
 
1107972 zei:
Behalve activesheet moest ik daar dan ook alle worksheets toevoegen.
In neem aan dat dat correct is want het werkt nu wel goed
Ik weet niet of ik je helemaal goed begrijp, maar het is zo dat alles wat staat in de werkbladmodule van "2de ronde" (Private sub.....) in principe uitsluitend betrekking heeft op wat er in het werkblad "2de ronde" plaatsvindt. Wil je in een ander werkblad iets automatisch laten plaatsvinden, dan moet je daar ook een "Private sub..." plaatsen. De eerste regel (bv. Private sub worksheet_change....) mag hetzelfde zijn als in een ander werkblad.

Als ik cel C1 kopieer naar E1 dan verandert de formule naar =ALS(C1=D1;3;0). Wat is vragen wil is of er dus een optie is om bij het kopieren van een formule naar een andere cel dat een deel van de formule niet gewijzigd word, in dit geval de referentie naar cel A1. Mijn gevoel zegt dat het iets is met het dollar teken.
Dat klopt. Typ in C1: =ALS($A$1=B$1;3;0) . Als je daarna C1 naar E1 kopieert, komt daar te staan: =ALS($A$1=D$1;3;0) , wat de bedoeling is.

Dit zou dan ook moeten voor de opmaak van een cel, in mijn geval is die nu: formule is =D3=0
Dit is me niet duidelijk. Waar komt =D3=0 te staan?
 
Laatst bewerkt:
Sorry voor de late reactie,

dat van die dollar tekens had ik ondertussen al gevonden onder de noemer relatieve en absolute waarde.

Het onderwerp =D3=0

Die komt op de plek bij de opmaak van een cel, bijvoorbeeld E4. Als de inhoud van cel D3 gelijk is aan 0 dan wil ik dat de inhoud van de cel E4 niet zichtbaar is. Omdat ik die cel zowel in X als Y richting veel wil gaan kopieëren en cel D3 op zijn plek gaat moet het een absolute waarde worden. Voor de Y richting maakt dat dan weer niet zoveel uit dus werd de voorwaardelijke opmaak =$D3=0

En wat betreft de macro, de macro die kolommen verbergt in verschillende bladen als de waarde van cel A1 in blad 1 gelijk is aan 0.

Omdat activesheet.unprotect/protect alleen geld voor het blad waarin de macro is gemaakt zou de macro niet de beveiliging tijdelijk uitzetten (tenminste in neem aan dat dat de functie van het commando is) waardoor ik weer die foutmelding kreeg en er uiteindelijk geen actie gebeurde. Daarom heb ik behalve activesheet ook de regel: worksheets("2de ronde") .unprotect/protect direct daaronder toegevoegd. Nu werkt hij namelijk ook in alle andere bladen. Het idee hierachter is dus dat ik 1 waarde hoef te veranderen om daarna alle cellen voor de berekeningen ook tezien kan krijgen.

Ben nu bezig met het maken van bladen waar de mensen hun voorspelling kunnen maken. Daarnaast moet er nog een blad komen waar een overzicht komt staan van de beste verspellers en dan wil ik nog kijken of ik een blad kan maken waar ik simpel voorspellingen kan beheren, invoegen uit een andere document en deelnemers kan toevoegen en verwijderen.
 
In de werkbladmodule van "Blad2(2de ronde)" neem je op (of heb je al opgenomen): Worksheets("2de Ronde").unprotect aan het begin en Worksheets("2de Ronde").protect aan het eind. Je kunt daar (naar mijn mening) best geen code plaatsen die op andere werkbladen betrekking heeft. Maar als het voor jou prima werkt zoals het nu is, dan moet je het maar zo laten.
Om de beveiliging van andere (of van alle) werkbladen op te heffen zou ik een afzonderlijke macro gebruiken, die je niet in een werkblad- maar in een gewone module moet plaatsen. Daarnaast maak je er ook een om de beveiliging weer in te schakelen (evt. met wachtwoord). Als je die macro's vastlegt onder een sneltoets, dan kun je met 1 druk op de knop de beveiliging in- en uitschakelen.
Zijn alle vragen hiermee (voorlopig) opgelost?
 
Al mijn vragen zijn tot nu toe opgelost, maar ik heb weer een nieuwe wat waarschijnlijk weer over een macro gaat.

Ik ben bezig met een deelnemerslijst aan het maken en daarbij wil ik dat de beheerder van het document vooraf moet instellen hoeveel deelnemers er zijn.

Het idee hierachter is dat aan de hand van deze info de macro een x aantal deelnemersplekken zichtbaar maakt. Ik zou voor elk x aantal deelnemers een aparte macro kunnen maken, maar dit is iets te tijdrovend en ik dacht dat het simpeler zou moeten kunnen.

Mijn idee was op in een verborgen kolom het aantal deelnemers met een stap van 1 per regel af te tellen. Op het moment dat deze waarde onder 0 komt moeten deze waarden worden verborgen.


Private Sub Worksheet_Change(ByVal Target As Range)
Application.screenupdating = False
ActiveSheet.Unprotect

If [C] < 0 Then
Rows("##").EntireRow.Hidden = True
Else
Rows("##").EntireRow.Hidden = False
End If

ActiveSheet.Protect
Application.screenupdating = True
End Sub

## = dit moet een een variabele regelnummer zijn, dus als C15 = 1 moet deze zichtbaar blijven of worden. Als C18 = -2 moet deze verborgen worden of eventueel verborgen blijven.

PS1: true en false van de rijen klopt misschien maar daar zou ik in praktijk wel achter komen.
PS2: eventueel koppel ik deze macro aan een knop vast als blijkt dat hij invloed heeft op de werksnelheid van het document.

Alvast bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan