[XL] automatisch rij verbergen volgens resultaat formule*

Pagina: 1
Acties:
  • 5.616 views

Acties:
  • 0 Henk 'm!

  • Kurgan
  • Registratie: Oktober 2001
  • Laatst online: 14-05 22:18
Ik wil in een excel sheet automatisch een rij laten verbergen als een functie in kolom C de waarde 0 terug geeft. Nu heb ik na wat zoekwerk op internet wel de volgende code gevonden:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
If Not Intersect(Target, Range("C:C")) Is Nothing Then
If IsNumeric(Target) And Target.Value = 0 Then
Target.EntireRow.Hidden = True
End If
End If
End Sub

Het probleem is nu dat dit alleen werkt als de "0" handmatig wordt ingevoerd en niet als het het resultaat van de formule is. Ik ben net bezig mijn eerste voorzichtige stapjes in de wereld van VBA te zetten, kan iemand mij vertellen hoe ik dit voor elkaar krijg?

Foto's Take only pictures, leave only footprints, kill only time


Acties:
  • 0 Henk 'm!

  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 08-06 16:25

Tukk

De α-man met het ẞ-brein

Is het resultaat van de formule wel Numeric?
(Waarom controleer je daar op?)

edit:
De titel van de topic gaat niet echt over de vraag die je stelt.
Het laten verdwijnen lukt je wel, maar de conditie is het probleem.

[ Voor 48% gewijzigd door Tukk op 08-12-2008 18:11 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


Acties:
  • 0 Henk 'm!

Anoniem: 113297

Tukk schreef op maandag 08 december 2008 @ 18:11:
Is het resultaat van de formule wel Numeric?
Het laten verdwijnen lukt je wel, maar de conditie is het probleem.
het resultaattype is het probleem (nog) niet, het probleem is welk event gebruiken.
misschien werkt het Worksheet_Calculate() event iets beter ;)

Acties:
  • 0 Henk 'm!

  • Kurgan
  • Registratie: Oktober 2001
  • Laatst online: 14-05 22:18
Tukk schreef op maandag 08 december 2008 @ 18:11:
Is het resultaat van de formule wel Numeric?
(Waarom controleer je daar op?)
Ik zal even wat achtergrond geven. Het idee is om een formulier te maken met daarin twee pulldown menu's met de verschillende mogelijke afwerkingen van een product. Als je bv. in de eerste cel kiest voor de reeks "hout" dan kun je in de cel eronder kiezen voor "eiken", "beuken", "mahonie" of "maak een keuze", kies je voor "metaal" dan krijg je "aluminium", "RVS" of "maak een keuze". Kies je voor het laatste dan komen in de cellen eronder de verschillende opties te staan met een selectievakje erachter. Welke opties er moeten komen te staan wordt bepaald met verticaal zoeken.

Leg je de afwerking al vast door voor "eiken" of "aluminium"te kiezen dan komt er in plaats van een optie, "0" in de cellen te staan. De desbetreffende rijen moeten dan uit het zicht verdwijnen en weer terugkomen als je je keuze verandert. Wat is de beste manier om dit te realiseren? Met geen van beide events krijg ik het voor elkaar om de rijen te laten verbergen.

[ Voor 16% gewijzigd door Kurgan op 08-12-2008 21:19 ]

Foto's Take only pictures, leave only footprints, kill only time


Acties:
  • 0 Henk 'm!

  • Zerveza
  • Registratie: Maart 2001
  • Laatst online: 17-12-2021

Zerveza

DoS porfavor

ik begrijp het nog niet helemaal.. wil je de lay-out van het formulier laten afhangen van een keuze? of wil je via het verbergen van rijen ervoor zorgen dat je de juiste keuzemogelijkheden hebt in je tweede dropdown.

Acties:
  • 0 Henk 'm!

  • Kurgan
  • Registratie: Oktober 2001
  • Laatst online: 14-05 22:18
Zerveza schreef op maandag 08 december 2008 @ 21:54:
ik begrijp het nog niet helemaal.. wil je de lay-out van het formulier laten afhangen van een keuze? of wil je via het verbergen van rijen ervoor zorgen dat je de juiste keuzemogelijkheden hebt in je tweede dropdown.
Ik wil de lay-out veranderen, de ene dropdown afhankelijk maken van de andere is niet zo moeilijk. Wat ik wil is dat de rijen waar de keuzemogelijkheden voor de klant instaan worden verborgen als ze niet nodig zijn en weer terugkomen als er iets verandert.

Foto's Take only pictures, leave only footprints, kill only time


Acties:
  • 0 Henk 'm!

  • Kurgan
  • Registratie: Oktober 2001
  • Laatst online: 14-05 22:18
Even een schopje: heeft iemand nog een idee? Ik zie namelijk niet waarom het alleen werkt bij directe invoer van "0" en niet als het de uitkomst van een formule is.

Foto's Take only pictures, leave only footprints, kill only time


Acties:
  • 0 Henk 'm!

Anoniem: 113297

niet nodig van je topic te kicken binnen 24u.
Kurgan schreef op maandag 08 december 2008 @ 21:15:
Leg je de afwerking al vast door voor "eiken" of "aluminium"te kiezen dan komt er in plaats van een optie, "0" in de cellen te staan. De desbetreffende rijen moeten dan uit het zicht verdwijnen en weer terugkomen als je je keuze verandert. Wat is de beste manier om dit te realiseren? Met geen van beide events krijg ik het voor elkaar om de rijen te laten verbergen.
zoals ik al zei, met het worksheet_calculate event kan je dit doen (waar loopt het fout als je dit uitprobeert?).
maar gezien het scenario dat je schetst lijkt het beter dit rechtstreeks aan het aanpassen van de klaplijst te koppelen.

1. als het een klaplijst is uit de werkbalk formulieren, dan moet je een cel koppelen aan deze klaplijst die de indexnr van de lijst zal bevatten. deze cel moet nog in een andere formule op hetzelfde werkblad gebruikt worden, anders zal het caculate event niet getriggerd worden.
2. als het een klaplijst is uit de werkbalk besturingselementen, dan kan je de code gewoon in het ListBox1_Change() event plaatsen, zonder met gekoppelde cellen te hoeven werken.

ik veronderstel dat je optie 1 genomen hebt.

Acties:
  • 0 Henk 'm!

  • Kurgan
  • Registratie: Oktober 2001
  • Laatst online: 14-05 22:18
Anoniem: 113297 schreef op dinsdag 09 december 2008 @ 13:22:
ik veronderstel dat je optie 1 genomen hebt.
Nope, gewoon met datavalidatie. Kwestie van de keuzes uit het eerste menu als namen definiëren en dan het tweede menu met DEPENDENT naar de juiste bereiken laten verwijzen, maar dat terzijde.

Voor zover ik kan zien gaan er drie dingen fout, correct me if I'm wrong.
  1. De cel waarop de controle TARGET.VALUE uitgevoerd moet worden niet in de rij waar TARGET naar verwijst, maar 2 rijen lager.
  2. De rij die verborgen moet worden is niet de rij waar TARGET naar verwijst, maar de 3 tot 5 rijen eronder.
  3. Ik wil eigenlijk dat dit gedrag alleen optreedt bij het kiezen van deze bepaalde dropdown, dit om het onverwachts verbergen van rijen te voorkomen.
De cel waar het menu in staat is een samengevoegde cel, bereik C8:J8. De rijen die verborgen zouden moeten worden zijn 9 t/m 13. Ik heb het script nu bijgewerkt naar dit:

Private Sub Worksheet_Calculate()
If IsEmpty(Target) Then Exit Sub
If Not Intersect(Target, Range("C8:J8")) Is Nothing Then
If Target.Offset(1, 0).Value = 0 Then
for x=1 to 5
Target.offset(x,0).EntireRow.Hidden = True
next x
End If
End If
End Sub

Maar dit werkt nog steeds niet. Wat zie ik over het hoofd?

[ Voor 34% gewijzigd door Kurgan op 09-12-2008 21:23 ]

Foto's Take only pictures, leave only footprints, kill only time


Acties:
  • 0 Henk 'm!

Anoniem: 147180

Wat je eens zou kunnen proberen is een Worksheet Calculate event, zoals al eerder voorgesteld. Dat zou zoiets kunnen zijn:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Worksheet_Calculate()
Dim c As Range
Dim ckolom As Range

Set ckolom = Me.Range("C10:C20")

For Each c In ckolom
    If Not c.Value = "" Then
        If c.Value = 0 Then
            c.EntireRow.Hidden = True
        Else
            c.EntireRow.Hidden = False
        End If
    End If
Next c

End Sub


Daarbij ben ik ervanuitgegaan dat je formules in kolom C zich bevinden in de cellen C10 t/m C20 (Me.Range("C10:C20")). Dat kun je natuurlijk naar believen aanpassen.

Schud ik uit de losse mouw, dus mochten hier vba-experts zitten met een betere code, dan hou ik me aanbevolen ;)

Acties:
  • 0 Henk 'm!

  • Kurgan
  • Registratie: Oktober 2001
  • Laatst online: 14-05 22:18
Heejjj, dit lijkt te werken! _/-\o_ En ik begrijp het zelfs gedeeltelijk. 8)7 Ik begrijp alleen het nut van dit stukje niet helemaal: If Not c.Value = "", want ook zonder deze voorwaarde werkt het.

Foto's Take only pictures, leave only footprints, kill only time


Acties:
  • 0 Henk 'm!

Anoniem: 147180

Dat voorkomt dat eventueel lege cellen voor een cel met een waarde 0 worden aangezien. Toen ik de macro zojuist schreef zonder die inperking en een test uitvoerde op de gehele kolom C, werden alle rijen verborgen (of althans: was Excel hard op weg)... |:(
Mocht je in je bereik alleen cellen met formules hebben staan, dan is dat stukje code inderdaad niet nodig.

Acties:
  • 0 Henk 'm!

Anoniem: 1025503

Anoniem: 147180 schreef op dinsdag 9 december 2008 @ 21:21:
Wat je eens zou kunnen proberen is een Worksheet Calculate event, zoals al eerder voorgesteld. Dat zou zoiets kunnen zijn:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Worksheet_Calculate()
Dim c As Range
Dim ckolom As Range

Set ckolom = Me.Range("C10:C20")

For Each c In ckolom
    If Not c.Value = "" Then
        If c.Value = 0 Then
            c.EntireRow.Hidden = True
        Else
            c.EntireRow.Hidden = False
        End If
    End If
Next c

End Sub


Daarbij ben ik ervanuitgegaan dat je formules in kolom C zich bevinden in de cellen C10 t/m C20 (Me.Range("C10:C20")). Dat kun je natuurlijk naar believen aanpassen.

Schud ik uit de losse mouw, dus mochten hier vba-experts zitten met een betere code, dan hou ik me aanbevolen ;)
Wanneer ik deze code toepas in Excel 2010, blijft de macro continu door lopen en kan ik deze enkel met Escape stoppen. Wat kan ik doen om dit te fixen? Ik wil dat de macro enkel start wanneer er iets wijzigt in kolom C. (in kolom C heb ik een formule staan met verwijzing naar een andere cel buiten de range)
Ik hoop dat iemand mij kan helpen. Ik heb nul verstand van macro's.

Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 17:01
Anoniem: 1025503 schreef op dinsdag 9 januari 2018 @ 15:35:
[...]
Ik heb nul verstand van macro's.
Dodelijk.. code gebruiken, maar hem (helemaal?) niet begrijpen..
Met vba heb je nagenoeg volledige toegang tot iemands PC en kun je evt. zaken wissen, kopiëren en installeren... Bezint eer gij begint!

[ Voor 3% gewijzigd door breew op 09-01-2018 17:09 ]


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Anoniem: 1025503 schreef op dinsdag 9 januari 2018 @ 15:35:
[...]


Wanneer ik deze code toepas in Excel 2010, blijft de macro continu door lopen en kan ik deze enkel met Escape stoppen. Wat kan ik doen om dit te fixen? Ik wil dat de macro enkel start wanneer er iets wijzigt in kolom C. (in kolom C heb ik een formule staan met verwijzing naar een andere cel buiten de range)
Ik hoop dat iemand mij kan helpen. Ik heb nul verstand van macro's.
Welkom!

Ook in dit geval: wek geen topics van 10 jaar oud tot leven. In dit geval zeker niet, want het topic heeft waarschijnlijk slechts zijdelings te maken met wat je wilt bereiken.

Open dus een 'eigen topic' waarin je duidelijk en concreet uiteenzet wat je wilt bereiken en waar je op vastloopt in de uitvoering. Hoe je een goede topicstart maakt lees je hier: Het algemeen beleid #topicplaatsen

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1

Dit topic is gesloten.