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

Per rij voorwaardelijk verbergen

Status
Niet open voor verdere reacties.

grietsenwijma

Gebruiker
Lid geworden
25 jun 2013
Berichten
241
Ik heb al even wat rondgelezen, maar niet iets gevonden dat mij bruikbaar lijkt voor mijn doel.

Wat ik graag wil is dat over mijn gehele formulier de rijen al dan niet worden verborgen aan de hand van de waarde in laten we zeggen kolom X

Laten we zeggen
zichtbaar is "i"
Verbergen is "e"

Dus
x1-> i Zichtbaar
x2-> e Verbergen
x3-> i Zichtbaar
x4-> e Verbergen
x5-> i Zichtbaar

.....en dat dus 2000 rijen lang

Wie heeft een idee?
Vast bedankt!
 
dit eenvoudige macro'tje doet dat

Code:
Sub verbergen()
Do Until Range("X1").Offset(r) = ""
If Range("X1").Offset(r) = "i" Then Range("X1").Offset(r).RowHeight = 0
If Range("X1").Offset(r) = "e" Then Range("X1").Offset(r).RowHeight = 12.75
r = r + 1
Loop
End Sub
 
We komen dichterbij

Macrootje doet het wel bij mij.
Brengt me wel een stuk de goeie richting op maar ik ben er helaas nog niet.

1e
Als ik met andere bewerkingen regels verberg en weer zichtbaar maak poppen de met deze macro verborgen regels ook weer plotseling op.
Ik dacht in eerste instantie dat ik dit probleem had opgelost door de rijhoogte naar 0.1 te laten brengen in plaats van 0 maar dat geeft weer andere problemen.

2e
Er zijn in mijn formulier gebieden die als geheel verborgen zijn. Op de te verbergen rijen in die gebieden werkt het dus ook niet. (of werkt het wel maar komen ze mee tevoorschijn als ik het gebied weer zichtbaar maak?)

Bedankt so far,
...en als er iemand een vervolgoplossing weet: Graag!
 
Ik zou zeggen doe er een voorbeeldbestand bij dat het probleem duidelijk maakt. Aan
Laten we zeggen
hebben we blijkbaar niet zoveel. Als de vraag niet concreet is, is er ook geen oplossing te maken. Of het kost allemaal onnodige inspanningen.

Mogelijk dat dit wel werkt.
Code:
Sub VenA()
Dim r As Range, cl As Range
For Each cl In Columns(24).SpecialCells(2)
    If cl = "e" Then
        If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)
    End If
Next cl
If Not r Is Nothing Then r.EntireRow.Hidden = True
End Sub
 
Laatst bewerkt:
Of:
Code:
Sub hsv()
Dim c As String
 c = "a" & Join(Filter(Application.Transpose([if(x1:x2000="e",row(x1:x2000),"~")]), "~", False), ",a")
if c <> "a" then Range(c).EntireRow.Hidden = True
End Sub
 
Laatst bewerkt:
Verduidelijking

Ik heb even een testdocumentje in elkaar geflanst waarin je goed kunt zien wat de bedoeling is en wat de probleemstelling is.

er is sprake van groepering van rijen.
Als die verborgen zijn worden ze niet meegenomen, door geen de macro's die tot nu toe ter tafel zijn geweest.

Hoop dat dit wat duidelijkheid schept?

bedankt!Bekijk bijlage Testdocumentje.xlsm
 
Beter?
Code:
Sub hsv()
Dim c As String
[COLOR=#0000ff]Blad1.Outline.ShowLevels 2[/COLOR]
 c = "a" & Join(Filter(Application.Transpose([if(x1:x2000="e",row(x1:x2000),"~")]), "~", False), ",a")
If c <> "a" Then Range(c).EntireRow.Hidden = True
End Sub
 
Hoewel het wel kan (Ik heb er ooit iets over gelezen) kan het niet of je moet zeer goed zijn in VBA. Het klikken op de - of + voor het groeperen doet hetzelfde als rijen verbergen of zichtbaar maken. Volgens mij geeft dit geen enkel Change Event waarmee je eventueel een code zou kunnen starten.
 
Laatst bewerkt:
Helaas, 't is m nog niet

Bekijk bijlage Testdocumentje versie 3.xlsmBekijk bijlage 273137Aanpassing van HSV pakt wel alle rijen, maar zet de groepering standaard overal uit.

Ik heb mn testdocumentje nog even een stukje uitgebreid zodat de probleemstelling even wat duidelijker wordt.

Ik gebruik de groepering om de delen die geen waarden hebben groepsgewijs buiten beeld te houden.
Ik wil alleen die groepen in beeld die in kolom B waarden bevatten.
Is ook nodig om een document van ±2500 rijen werkbaar te houden.
Laatste aanpassing van HSV werkt wel, maar vervolgens zou ik het hele document door moeten om de meeste groepen weer "dicht" te zetten.
.....of zou dit met een apart vervolgmacrootje kunnen?

bedankt vast!
 
Laatst bewerkt:
Ik zie het probleem niet in de eerst gegeven code.
Uiteraard als je de outline weer opent komen de rijen met een 'e' weer te voorschijn.
 
Het hele groeperen op rij niveau heb ik nog nooit gebruikt. (mijn bestanden zijn over het algemeen wat groter dan maar 2500 rijen) Waarop is deze groepering gebaseerd?

Ik zie het probleem niet in de eerst gegeven code.
Had ik wel even. Is wel razendsnel.:d
 
Had ik niet getest op snelheid voor die paar rijen.
Door die van mij kun je een streep zetten bij meer dan 66 argumenten in de range.

Maar zou dit niet kunnen?
Code:
Sub hsv()
 Cells(1).CurrentRegion.AutoFilter 24, "<>e"
End Sub
 
Laatst bewerkt:
Helaas...

Laatste suggestie heb ik geprobeerd.

Heeft hetzelfde probleem:
Ik moet vervolgens weer handmatig de hele 2500 rijen bij langs om 3/4 van de groepen weer dicht te zetten

Is er niet een optie/code om de boel per rij naar beneden te laten werken en vervolgens aan de hand van de celwaarde "i" of "e" een rijhoogte van 12.75 of 0 toe te kennen?

't lijkt mij een methode die je bakje wel even laat malen, maar dat moet dan maar.

vast dank voor 't meedenken!
 
Beter?
Code:
Sub hsv()
Dim c As String
[COLOR=#0000ff]Blad1.Outline.ShowLevels 2[/COLOR]
 c = "a" & Join(Filter(Application.Transpose([if(x1:x2000="e",row(x1:x2000),"~")]), "~", False), ",a")
If c <> "a" Then Range(c).EntireRow.Hidden = True
End Sub

Nog beter ? ;)
Code:
Sub M_snb()
   on error resume next
   [COLOR=#0000ff]Blad1.Outline.ShowLevels 2[/COLOR]
   Range(Join(Filter([transpose(X2:X2000&row(X2:X2000))], "e"), ",")).EntireRow.Hidden = True
End Sub
 
Laatst bewerkt:
Dan lijkt me dit voldoende:

Code:
Sub M_snb()
  on error resume next
  Range(Join(Filter([transpose(if(B2:B2000="","",X2:X2000&row(X2:X2000)))], "e"), ",")).EntireRow.Hidden = True
End Sub

Dan is dat groeperen verder overbodig.
 
Helaas...

...is het niet zo simpel.

In mijn formulier gebruik ik de filter functie ook voor andere doeleinden. Op het moment dat ik die ga gebruiken valt de hele boel weer uit elkaar.

Ik denk dat de oplossing toch ligt in een code die doet wat ik eerder al noemde, één voor één per regel bekijken of er een i of een e staat, en aan de hand daarvan de rijhoogte op 12.75 of 0 stellen (of wellicht op 0.1?)

...en als het echt niet kan?..... kan ik natuurlijk ook overwegen andere dingen te gaan willen :)
 
citaat:
Ik dacht in eerste instantie dat ik dit probleem had opgelost door de rijhoogte naar 0.1 te laten brengen in plaats van 0 maar dat geeft weer andere problemen.
Code:
On Error Resume Next
  Range(Join(Filter([transpose(if(B2:B2000="","",X2:X2000&row(X2:X2000)))], "e"), ",")).RowHeight = 0
 
Een doordacht ontwerp bespaart in ieder geval veel code.
Maak daaarbij een onderscheid tussen een werkblad dat als opslag van gegevens (magazijn) dient en een werkblad dat dient als weergave (user interface) van gegevens voor een gebruiker.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan