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

Verbergen van rijen in VBA

  • Onderwerp starter Onderwerp starter RoyFr
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

RoyFr

Gebruiker
Lid geworden
8 apr 2016
Berichten
10
Hallo,

zie bijgevoegd bestand.

regel 7 tm 9, regel 10 tm 16 en regel 17 tm 20 zijn als het ware samen hangende parts (horen bij elkaar)

Via de macro button "insert part numer row" kan ik deze parts kopiëren (deze zijn afgeleid naar een relatieve, de groene balk)
Deze kan ik ook zo vaak als ik wil kopiëren.

Nu wil ik regel 14 tm 16 verbergen als cel P13 op NO staat.
Dit kan ik doen met:

Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "P13" Then
Application.EnableEvents = False
Application.ScreenUpdating = False
Rows("14:16").Hidden = (Target.Value = "NO")
Application.EnableEvents = True
Application.ScreenUpdating = True
End If

End Sub

Maar als ik nu de kopieer button gebruik bij regel 7 tm 9, zal de 14:16 regel niet meer op deze plek zitten en worden verkeerde regels verborgen.

Hoe kan ik dit oplossen?
Alvast bedankt
 

Bijlagen

Geef de range een naam dan kan je deze gebruiken.

Code:
Range("naam").EntireRow.Hidden = (Target.Value = 1)
 
Beste VenA,
dank voor je bericht. Dit kan ik idd toepassen.
Maar als ik dan deze part kopieer met de button "insert part numer row" dan neemt excel deze niet over.
Dan werk de code niet meer op het gekopieerde stuk.

Gr Roy
 
Test deze eens:

Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo oeps
 If Target.Address(False, False) = "S3" Then
     Application.EnableEvents = False
     Application.ScreenUpdating = False
     Set st = Range("a:a").Find("Material standard")
     If Not st Is Nothing Then
      Rows(st.Row).Resize(3).Hidden = (Target.Value = 1)
     End If
oeps:
     Application.EnableEvents = True
     Application.ScreenUpdating = True
 End If
 
 End Sub
 
Beste Cobbe,

deze werk opzich prima. Maar niet als de kopieer button gebruik.
Dan kopieer ik de part en dan werk hij niet meer op de gekopieerde regels.
Heb je hier ook nog een foefje op?
Thx
Gr Roy
 
De code in onderstaande formule " If Target.Address(False, False) = "S3" Then " kan deze op 1 of andere manier niet vervangen worden door dat hij niet zoekt naar een cel maar naar alle maarde in het sheet. Nu verwijst deze steeds naar target address S3... maar dat moet vlgs mij een verwijzing naar het hele sheet. Dan moet het werken. Ik kan de code niet bedenken, weet iemand van jullie dit?

Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo oeps
If Target.Address(False, False) = "S3" Then
Application.EnableEvents = False
Application.ScreenUpdating = False
Set st = Range("a:a").Find("Material standard")
If Not st Is Nothing Then
Rows(st.Row).Resize(3).Hidden = (Target.Value = 1)
End If
oeps:
Application.EnableEvents = True
Application.ScreenUpdating = True
End If

End Sub
 
Als die Target.address naar elke cel in de sheet moet verwijzen kan je hem beter weghalen.
 
Dit is mssn een goed idee. Maar hoe moet ik mijn code dan inrichten.
Ik heb geen idee hoe ik deze moet verwijzen.
 
Kan je even uitleggen wat je nu echt wilt? De vraag is volgens mij om het blokje van 3 rijen te verbergen dat bij 'Material standard:' hoort. Wat er niet aan werkt met zowel de code van Cobbe als die van mij kan ik niet vinden.

Nb.
- Maak svp gebruik van codetags als je hier code plaatst.
- Gebruik bij voorkeur geen samengevoegde cellen en al helemaal niet in combinatie met VBA.
- Om elke procedure in een eigen module te zetten is ook niet echt nodig.
- Maak bij voorkeur geen gebruik van Select.

Welkom in de wondere wereld van VBA en de helper(s) die graag wat meer info wil(len):d
 
Ik ben al lang blij dat jullie bereid zijn mij te helpen (als beginnend Excel programmeur).
Ik probeer goed uit te leggen wat ik wil:

Cel P13 kan met YES / NO geselecteerd worden. Als de cel "NO" is dan moeten regel 14-15-16 zichtbaar worden (en bij YES en Select verborgen).
Met de code die jullie eerder opgaven lukt dat ook, maar...

Met de "Insert part number row" button kan ik rijen toevoegen (deze button zit bij DECLARATION OF COMPLIANCE en bij STEEL MECHANICAL AND CHEMICAL REQUIREMENTS).
Als ik dan rijen toevoeg bij DECLARATION OF COMPLIANCE dan zal cel P13 niet meer regel 14-15-16 doen verbergen/zichtbaar maken. Omdat de code hierna verwijst.

Dus wat ik eigenlijk zoek is een code die niet verwijst naar een vaste cel maar naar het hele werkblad. Als een cel NO is dan via een relatieve (van uit de NO cel) de onderste 3 regels verbergen / zichtbaar maken.

Ik hoop dat het duidelijk is.
En bedankt voor je tips!
 
Code:
Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Columns(16)) Is Nothing Then
    If Target.Offset(, -2).Value = "Applicable material acc standards:" Then
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        Rows(Target.Row).Offset(1).Resize(3).Hidden = (Target.Value <> "NO")
        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End If
  End If
End Sub
 
Deze wekt wel. Super!
Maar ik krijg alleen een Run-time error 1004 als ik via mijn "insert part number row" button regel kopieer.
Hoe krijg ik deze er nog uit?
 
Code:
Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If Not Intersect(Target, Columns(16)) Is Nothing Then
    If Target.Offset(, -2).Value = "Applicable material acc standards:" Then
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        Rows(Target.Row).Offset(1).Resize(3).Hidden = (Target.Value <> "NO")
        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End If
  End If
End Sub
 
Super het werkt!
Bedankt allemaal voor jullie hulp, zeker Warme bakkertje!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan