EXCEL VBA vraagske

Dexels

Well-known member
ok, ik ben nog redelijk nieuw in het VBA verhaal in excel.
Nu ben ik opzoek naar een manier om onderstaande korter te schrijven, gezien ik geen goesting heb om dit voor het hele bereik manueel aan te passen :p

Kan iemand me uit mijn lijden verlossen?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Rows("149").EntireRow.Hidden = Range("T149").Value < 1
 Rows("150").EntireRow.Hidden = Range("T151").Value < 1
 Rows("151").EntireRow.Hidden = Range("T152").Value < 1
...
 Rows("168").EntireRow.Hidden = Range("T168").Value < 1
End Sub

Tis dus de bedoeling dat in de hele reeks van rij 149 t/m 168, CEL 'T' gecontroleerd wordt op een waarde en als die lager is dan 1 dat deze automagisch worden verborgen. Ik neem aan dat ik dit niet voor elke rij hoef uit te typen en dat dit ook anders op te lossen is, alleen zie ik even niet hoe.
 
Ik ken ook niet veel van VBA, maar ik zou het doen met een soort for loop:

Code:
Sub HideRows()
StartRow = 149
EndRow = 168
ColNum = 20
For i = StartRow To EndRow
If Cells(i, ColNum).Value < 1 Then
Cells(i, ColNum).EntireRow.Hidden = True
Else
Cells(i, ColNum).EntireRow.Hidden = False
End If
Next i
End Sub
 
merci, het lijkt te werken!
Damn excel wordt daar f#cking traag door
De forloop op zich zou eigenlijk niet zo veel vertraging mogen opleveren.
Het zal dus eerder aan die if else liggen.
Kan je niet dit hergebruiken Rows("168").EntireRow.Hidden = Range("T168").Value < 1 ? Waarbij je 168 dan vervangt door i?
 
De forloop op zich zou eigenlijk niet zo veel vertraging mogen opleveren.
Het zal dus eerder aan die if else liggen.
Kan je niet dit hergebruiken Rows("168").EntireRow.Hidden = Range("T168").Value < 1 ? Waarbij je 168 dan vervangt door i?
Ik had het bereik nog behoorlijk vergroot, waardoor deze een 300 lijnen moest controleren.

Maar zal eens zien, is nu even niet prioritair :p
 
Oké, volgend probleem.

De knop met de macro achter moet in een beveiligd werkblad komen.
Als ik de beveiliging aan zet krijg ik een foutmelding als ik de knop aan klik (en deze werkt dus niet)
iemand een idee? het (niet echte) passwoord van het blad is Tetten
en de knop zit in de cel
Q141

Private Sub Workbook_Open()
Sheets("PLANNEN").Protect Password:=Tetten UserInterfaceOnly:=True
End Sub
 
Laatst bewerkt:
Oké, volgend probleem.

De knop met de macro achter moet in een beveiligd werkblad komen.
Als ik de beveiliging aan zet krijg ik een foutmelding als ik de knop aan klik (en deze werkt dus niet)
iemand een idee? het (niet echte) passwoord van het blad is Tetten
en de knop zit in de cel Q141
Wanneer ge uwe sheet beveiligd moet je de optie (in het Engels) "Allow all users of this worksheet to - Format Rows" aanvinken

Anders kunnen ze de rijen niet verbergen.
 
zij mogen dat zelf niet doen, het moet automagisch via de knop
de gebruikers mogen zo minmogelijk zelf aan passen, omdat aan het einde van de rit een controle uitgevoerd wordt op een aantal verborgen cellen om te kijken of de lijst compleet is etc.
 
Je uitleg is niet erg logisch.

Enerzijds kan je via het Worksheet_Change event werken en zal de specifieke wijziging automatisch worden geëvalueerd of anderzijds werk je met een macro knop die je manueel triggert en alles in 1 keer wijzigt o.b.v. van een loop. Je huidige code start bij elke wijziging (Worksheet_Change) een volledige loop op. Dat lijkt mij zeer inefficiënt.

Hier code voor het Worksheet_Change() event.

Code:
Option explicit

Private Sub Worksheet_Change(ByVal Target as Range)

Dim rng as Range

Set rng = Intersect(Target, Range("T149:T168"))

    If Target.Address = Target.EntireRow.Address Or Target.Address = Target.EntireColumn.Address Then

        'Niets doen indien kolom/rij wordt verwijderd

    ElseIf rng.Value < 1 Then

        rng.EntireRow.Hidden = True 'Kleiner dan 1 = verbergen

    Else

        rng.EntireRow.Hidden = False  'Vanaf 1 is tonen

    End if

Set rng = Nothing
 
End Sub

Wel even nakijken wat er gebeurt indien de waarde wordt gedelete of een letter wordt gebruikt.
 
Laatst bewerkt:
Terug
Bovenaan