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

Macro / VBA werkbladen tonen of verbergen inkorten

Status
Niet open voor verdere reacties.

abbcdcg

Gebruiker
Lid geworden
12 mrt 2012
Berichten
71
Hallo,

Ik zit even te knutselen. "Database!B9" is een uitkomst vanuit een besturingselement. De macro staat onder het tabblad Database en werkt op deze manier goed.

Kan deze macro anders / korter....???

Thanks!

Code:
Private Sub Worksheet_Calculate()
 If Worksheets("Database").Range("B9") = "1" Then Sheets("Sheet A").Visible = False
 If Worksheets("Database").Range("B9") = "1" Then Sheets("Sheet B").Visible = False
 If Worksheets("Database").Range("B9") = "1" Then Sheets("Sheet C").Visible = False
 If Worksheets("Database").Range("B9") = "2" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "2" Then Sheets("Sheet B").Visible = False
 If Worksheets("Database").Range("B9") = "2" Then Sheets("Sheet C").Visible = False
 If Worksheets("Database").Range("B9") = "3" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "3" Then Sheets("Sheet B").Visible = False
 If Worksheets("Database").Range("B9") = "3" Then Sheets("Sheet C").Visible = False
 If Worksheets("Database").Range("B9") = "4" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "4" Then Sheets("Sheet B").Visible = True
 If Worksheets("Database").Range("B9") = "4" Then Sheets("Sheet C").Visible = True
 If Worksheets("Database").Range("B9") = "5" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "5" Then Sheets("Sheet B").Visible = True
 If Worksheets("Database").Range("B9") = "5" Then Sheets("Sheet C").Visible = True
 If Worksheets("Database").Range("B9") = "6" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "6" Then Sheets("Sheet B").Visible = False
 If Worksheets("Database").Range("B9") = "6" Then Sheets("Sheet C").Visible = False
 If Worksheets("Database").Range("B9") = "7" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "7" Then Sheets("Sheet B").Visible = False
 If Worksheets("Database").Range("B9") = "7" Then Sheets("Sheet C").Visible = False
 If Worksheets("Database").Range("B9") = "8" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "8" Then Sheets("Sheet B").Visible = True
 If Worksheets("Database").Range("B9") = "8" Then Sheets("Sheet C").Visible = True
 If Worksheets("Database").Range("B9") = "9" Then Sheets("Sheet A").Visible = True
 If Worksheets("Database").Range("B9") = "9" Then Sheets("Sheet B").Visible = True
 If Worksheets("Database").Range("B9") = "9" Then Sheets("Sheet C").Visible = True
 If Worksheets("Database").Range("B9") = "10" Then Sheets("Sheet A").Visible = False
 If Worksheets("Database").Range("B9") = "10" Then Sheets("Sheet B").Visible = True
 If Worksheets("Database").Range("B9") = "10" Then Sheets("Sheet C").Visible = True
 If Worksheets("Database").Range("B9") = "11" Then Sheets("Sheet A").Visible = False
 If Worksheets("Database").Range("B9") = "11" Then Sheets("Sheet B").Visible = True
 If Worksheets("Database").Range("B9") = "11" Then Sheets("Sheet C").Visible = True
End Sub
 
Veel korter denk ik niet, maar wel netter en beter leesbaar:
Code:
Private Sub Workssdfheet_Calculate()
    Select Case Sheets("Database").Range("B9")
        Case 1
            Sheets("Sheet A").Visible = False
            Sheets("Sheet B").Visible = False
            Sheets("Sheet C").Visible = False
        Case 2
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = False
            Sheets("Sheet C").Visible = False
        Case 3
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = False
            Sheets("Sheet C").Visible = False
        Case 4
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = True
            Sheets("Sheet C").Visible = True
        Case 5
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = True
            Sheets("Sheet C").Visible = True
        Case 6
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = False
            Sheets("Sheet C").Visible = False
        Case 7
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = False
            Sheets("Sheet C").Visible = False
        Case 8
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = True
            Sheets("Sheet C").Visible = True
        Case 9
            Sheets("Sheet A").Visible = True
            Sheets("Sheet B").Visible = True
            Sheets("Sheet C").Visible = True
        Case 10
            Sheets("Sheet A").Visible = False
            Sheets("Sheet B").Visible = True
            Sheets("Sheet C").Visible = True
        Case 11
            Sheets("Sheet A").Visible = False
            Sheets("Sheet B").Visible = True
            Sheets("Sheet C").Visible = True
   End With
End Sub

Maar bij 4 en 5 bijvoorbeeld moet hetzelfde gebeuren.
Dus dat nag je ook als Case 4, 5 noteren.
Dat scheelt weer 4 regels.
Of dat ook voor anderen geldt mag je zelf bekijken.
 
Laatst bewerkt:
Code:
Private Sub Worksheet_Calculate()

   Sheets("Sheet A").Visible = True              'alle 3 zichtbaar
   Sheets("Sheet B").Visible = True
   Sheets("Sheet C").Visible = True

   Select Case Worksheets("Database").Range("B9").Value   'afhankelijk van B9 enkele terug verbergen
      Case Is = "1"
         Sheets("Sheet A").Visible = False
         Sheets("Sheet B").Visible = False
         Sheets("Sheet C").Visible = False
      Case "2", "3", "6", "7"
         Sheets("Sheet B").Visible = False
         Sheets("Sheet C").Visible = False
      Case "4", "5", "8", "9"
      Case "10", "11"
         Sheets("Sheet A").Visible = False
   End Select
End Sub
oei, Edmoor was sneller
 
Maar jij hebt er dieper naar gekeken en de combinaties gemaakt :)
 
Code:
Private Sub Worksheet_Calculate()

   Sheets("Sheet A").Visible = True              'alle 3 zichtbaar
   Sheets("Sheet B").Visible = True
   Sheets("Sheet C").Visible = True

   Select Case Worksheets("Database").Range("B9").Value   'afhankelijk van B9 enkele terug verbergen
      Case Is = "1"
         Sheets("Sheet A").Visible = False
         Sheets("Sheet B").Visible = False
         Sheets("Sheet C").Visible = False
      Case "2", "3", "6", "7"
         Sheets("Sheet B").Visible = False
         Sheets("Sheet C").Visible = False
      Case "4", "5", "8", "9"
      Case "10", "11"
         Sheets("Sheet A").Visible = False
   End Select
End Sub
oei, Edmoor was sneller


Code:
Private Sub Worksheet_Calculate()

   Sheets("Sheet A").Visible = True              'alle 3 zichtbaar
   Sheets("Sheet B").Visible = True
   Sheets("Sheet C").Visible = True

   Select Case Worksheets("Database").Range("B9").Value   'afhankelijk van B9 enkele terug verbergen
      Case Is = "1"
         Sheets("Sheet A").Visible = False
         Sheets("Sheet B").Visible = False
         Sheets("Sheet C").Visible = False
      Case "2", "3", "6", "7"
         Sheets("Sheet B").Visible = False
         Sheets("Sheet C").Visible = False
      Case "4", "5", "8", "9"
      Case "10", "11"
         Sheets("Sheet A").Visible = False
   End Select
End Sub
oei, Edmoor was sneller

Dit werkt super! Thanks!

Nu wil ik een stap verder door hierbij een volgende situatie aan toe te voegen.
Hoe kan ik hier nu een situatie aan toevoegen waarde de waarde uit (b.v.) Database!B10 wordt gehaald, en "Sheet D" wordt getoond / verborgen op basis van de Case 1 of 2?
 
bv. als laatste zin, na die "end select"en voor de "end sub".
Let wel, dat blad wordt getoond op waarde "1" en in alle andere gevallen, dus ook "2", verborgen.
Dat is lichtjes anders dan wat je wilde, maar je moet anders duidelijker zijn over wat er moet gebeuren bij andere waarden.
Code:
Sheets("Sheet D").Visible = (Worksheets("Database").Range("B10") = "1")
 
Laatst bewerkt:
Maak een tabelletje met twee kolommen, kolom A de werkblad namen, kolom B een formule die op basis van je invoer een TRUE geeft (of WAAR in NL versie van Excel) als de sheet zichtbaar mag zijn of FALSE (ONWAAR) indien niet. Dan is je code heel simpel iets als:
Code:
Private Sub Worksheet_Calculate()
   Dim Cl as Range
   For Each Cl In Worksheets("Settings").Range("A2:A4")
      If Cl.Offset(, 1).Value Then
         Sh.Visible = xlSheetVisible
      Else
         Sh.Visible = xlSheetHidden
      End If
   Next   
End Sub
 
Beter nog, zet het bereik met de bladnamen om in een tabel met de naam tblSheets en gebruik deze code (ik ging ervan uit dat e.e.a. op een werkblad genaamd "Settings" staat):
Code:
Private Sub Worksheet_Calculate()
   Dim Cl as Range
   For Each Cl In ThisWorkbook.Worksheets("Settings").ListObjects("tblSheets").ListColumns(1).DataBodyRange
      If Cl.Offset(, 1).Value Then
         Sh.Visible = xlSheetVisible
      Else
         Sh.Visible = xlSheetHidden
      End If
   Next   
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan