Knoppen hiden afhankelijk van celwaarde

Status
Niet open voor verdere reacties.

WhiteSky

Gebruiker
Lid geworden
15 feb 2018
Berichten
55
Hoi,
Ik heb een Excel gemaakt waar redelijk wat command buttons opstaan en deze zijn onderverdeeld in verschillende rijen en kolommen (zie onderstaande afbeelding).
De benaming van de knoppen is cbuOperAT1 (voor de eerste knop bij de rij van Persoon A in kolom 1) tem cbuOperIT18 voor de allerlaatste knop bij rij van Persoon I in kolom 18).
Waarbij dus de vetgedrukte teksten variabelen zijn afhankelijk van hun kolom en rij.
Nu zou ik graag ergens en cel willen laten invullen en afhankelijk van het cijfer in deze cel, dat aantal rijen command buttons zichtbaar laten worden.
Dus indien celwaarde = 1 ==> alles van Persoon A is zichtbaar alle anderen niet, celwaarde = 2 ==> alles van Persoon A en Persoon B is zichtbaar en de rest niet.
Nu omdat het toch over een aanzienlijk aantal (162) knoppen gaat, is het onmogelijk om elke knop apart te gaan zeggen of het zichtbaar mag zijn of niet, maar ik vind zelf niet echt de oplossing hoe ik met die variabele in het midden van een naam kan werken enzo.

Heeft iemand hier een oplossing voor?
(In bijlage een zicht hoe alle knoppen eruit zien).

Mvg
 

Bijlagen

  • Knoppen.png
    Knoppen.png
    18,4 KB · Weergaven: 20
Ik druk en ik druk en ik druk op de knoppen, en er gebeurt niks. Je hebt toch niet per ongeluk een plaatje meegestuurd i.p.v. een werkbaar bestandje? Verder vraag ik me af waarom je niet volstaat met één rij knoppen, die de acties uitvoert op basis van de gekozen persoon (= rij). Ik vind het nogal omslachtig wat je hebt gebakken. Moet een heel stuk slimmer kunnen. Maar ja, dat kunnen we zo dus niet checken...
 
Het is bedoeld voor verschillende personen (= rijen) te kunnen 'timen' hoelang ze aan bepaalde taken (kolommen) bezig zijn. Dus als een persoon aan één taak start wordt een knop ingeduwd en als die taak stopt wordt die knop terug ingeduwd en op een ander tabblad worden dan de tijden bijgehouden. Daarmee de verschillende rijen en kolommen, afhankelijk van de grootte van de taak kan deze dus ook opgesplitst zijn in meerdere deeltaken, waardoor we dus meerdere kolommen nodig hebben.
Dit moet ook 'zo simpel mogelijk' in gebruik zijn. Ik zal eens even kijken of ik een vergemakkelijkt werkbestand kan toevoegen.
 
Ik heb nog even verdergezocht en ik heb hetvolgende toegepast, wat werkt voor mij.
Code:
Sub Hide_buttons()
Dim strOper As String
Dim bjx As OLEObject
Dim bytNaam As Byte, bytAantal As Byte, bytNummer As Byte
Application.ScreenUpdating = False
bytAantal = Sheets("Knoppen").Range("AG4").Value

For Each objx In Sheets("Knoppen").OLEObjects
    bytNaam = Len(objx.Name)
    If bytNaam >= 10 Then
        strOper = Mid(objx.Name, 8, 1)
    Else  'andere knoppen moeten niet verborgen worden
        GoTo Volgende
    End If
'letter omzetten naar cijfer
    Select Case strOper
        Case "A"
            bytNummer = 1
        Case "B"
            bytNummer = 2
        Case "C"
            bytNummer = 3
        Case "D"
            bytNummer = 4
        Case "E"
            bytNummer = 5
        Case "F"
            bytNummer = 6
        Case "G"
            bytNummer = 7
        Case "H"
            bytNummer = 8
        Case "I"
            bytNummer = 9
    End Select
'knoppen verbergen
    If bytNummer > bytAantal Then
        objx.Visible = False
    Else
        objx.Visible = True
    End If
'rijen verbergen
    Select Case bytAantal
        Case 1
            Sheets("Knoppen").Rows("8:9").EntireRow.Hidden = False
            Sheets("Knoppen").Rows("10:25").EntireRow.Hidden = True
            
        Case 2
            Sheets("Knoppen").Rows("8:11").EntireRow.Hidden = False
            Sheets("knoppen").Rows("12:25").EntireRow.Hidden = True
        Case 3
            Sheets("Knoppen").Rows("8:13").EntireRow.Hidden = False
            Sheets("Knoppen").Rows("14:25").EntireRow.Hidden = True
        Case 4
            Sheets("Knoppen").Rows("8:15").EntireRow.Hidden = False
            Sheets("Knoppen").Rows("16:25").EntireRow.Hidden = True
        Case 5
            Sheets("Knoppen").Rows("8:17").EntireRow.Hidden = False
            Sheets("Knoppen").Rows("18:25").EntireRow.Hidden = True
        Case 6
            Sheets("Knoppen").Rows("8:19").EntireRow.Hidden = False
            Sheets("Knoppen").Rows("20:25").EntireRow.Hidden = True
        Case 7
            Sheets("Knoppen").Rows("8:21").EntireRow.Hidden = False
            Sheets("Knoppen").Rows("22:25").EntireRow.Hidden = True
        Case 8
            Sheets("Knoppen").Rows("8:23").EntireRow.Hidden = False
            Sheets("Knoppen").Rows("24:25").EntireRow.Hidden = True
        Case 9
            Sheets("Knoppen").Rows("8:25").EntireRow.Hidden = False
    End Select
            
Volgende:
Next

Application.ScreenUpdating = True

End Sub
 
Daarvoor heeft MS tabstrips ontworpen, zodat je met 6 regels VBA toekomt.

Jouw 'aanpak' voldoet niet aan 'zo simpel mogelijk'.
 
Laatst bewerkt:
Goto is natuurlijk al helemaal uit den boze.
En in plaats van dit:
Code:
    Select Case strOper
        Case "A"
            bytNummer = 1
        Case "B"
            bytNummer = 2
        Case "C"
            bytNummer = 3
        Case "D"
            bytNummer = 4
        Case "E"
            bytNummer = 5
        Case "F"
            bytNummer = 6
        Case "G"
            bytNummer = 7
        Case "H"
            bytNummer = 8
        Case "I"
            bytNummer = 9
    End Select

Kan je ook dit doen:
Code:
bytNummer = Asc(strOper) - 64

Of die Select Case gewoon weg laten en de volgende zo doen:
Code:
Select Case Asc(strOper) - 64
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan