checkbox nascondi schede



  • checkbox nascondi schede
    di paul (utente non iscritto) data: 04/07/2016 11:04:55

    buongiorno a tutti.
    nella colonna A ho una lista di nomi. nella colonna B ho N checkbox tanti quanti sono i nomi nella colonna A.
    all'inizio i check sono tutti FALSE.
    vorrei che quando si fa il check ad un determinato nome mi si scopra la scheda con lo stesso nome chekkato. con la macro sono riuscito a fare nascondere/scoprire la scheda GENERICA; ma non riesco a fare un ciclo per tutte quante associando il nome della colonna A.
    es.
    COL A COL B
    FOGLIO2 CASELLA CHECK
    FOGLIO3 CASELLA CHECK
    FOGLIO4 CASELLA CHECK
    ALL'INIZIO LE SCHEDE SONO TUTTE NASCOSTE. se per esempio clicco sul check del foglio3 vorrei che mi scoprisse solo la scheda del foglio3. se clicco sul check del foglio 4 vorrei che mi scopra solo il foglio4 ecc ecc

     
    codice per scoprire/nascondere schede e sotto la macro per applicarlo a tutte.
    
    Sub CheckBoxscheda()
    Dim ws As Worksheet
    Dim chk As CheckBox
    
    Set ws = ActiveSheet
    Set chk = ws.CheckBoxes(Application.Caller)
    
    Select Case chk.Value
       Case 1   'box is checked
          Worksheets("Foglio2").Visible = True
       Case Else   'box is not checked
          Worksheets("Foglio2").Visible = False
    End Select
    
    End Sub
    
    Sub SetCheckBoxesMacro()
    Dim chk As CheckBox
    
    For Each chk In ActiveSheet.CheckBoxes
       chk.OnAction = "CheckBoxscheda"
    Next chk
    
    End Sub
    
    



  • di patel data: 04/07/2016 11:25:10

    allega un file di esempio per i test





  • di paul (utente non iscritto) data: 04/07/2016 11:47:45

    ok l'ho inserito



  • di scossa data: 04/07/2016 15:07:36

    cit.: "se per esempio clicco sul check del foglio3 vorrei che mi scoprisse solo la scheda del foglio3. se clicco sul check del foglio 4 vorrei che mi scopra solo il foglio4 ecc ecc"

    Se ho capito quello che vuoi, il codice sotto dovrebbe andar bene.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    Sub CheckBoxscheda()
      Dim ws As Worksheet
      Dim chk As CheckBox
      Dim chkCaller As CheckBox
      Dim sh As Worksheet
      
      Set ws = ActiveSheet
      Set chkCaller = ws.CheckBoxes(Application.Caller)
      For Each sh In Sheets(Array("Foglio2", "Foglio3", "Foglio4", "Foglio5")) 'aggiungere gli altri fogli (6, 7, 8 e 9 se esistono)
         sh.Visible = xlSheetHidden
      Next
      For Each chk In ActiveSheet.CheckBoxes
        If chkCaller.Value = 1 And chk.Name = chkCaller.Name Then
              Worksheets("Foglio" & Range(chk.LinkedCell).Row).Visible = True
        Else
          chk.Value = 0
        End If
      Next
      Set ws = Nothing
      Set chkCaller = Nothing
      
    End Sub



  • di paul (utente non iscritto) data: 04/07/2016 15:57:41

    innanzitutto grazie per l'aiuto!!!!

    il codice funziona però io non voglio che mi faccia selezionare al MAX un check. mi spiego meglio. con questo codice io posso selezionare solo una scheda, se per esempio voglio foglio2 checkato e foglio3 checkato, quando checko il foglio3 in automatico il foglio2 mi viede deselezionato. mentre io vorrei attivi tutti quelli che seleziono e non solo uno.

    sono alle prime armi con le macro. scusate se scrivo scemenze.



  • di scossa data: 04/07/2016 16:05:17

    Ciao,

    mi ero attenuto a quello che avevi scritto tu : "se clicco sul check del foglio 4 vorrei che mi scopra solo il foglio4 "
    "solo il foglio4" per me vuol dire che gli altri devono venire nascosti ....

    Comunque sotto trovi il codice modificato a coerenza con quanto richiesto.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    Sub CheckBoxscheda()
      Dim ws As Worksheet
      Dim chk As CheckBox
      Dim chkCaller As CheckBox
      Dim sh As Worksheet
      
      Set ws = ActiveSheet
      Set chkCaller = ws.CheckBoxes(Application.Caller)
      For Each sh In Sheets(Array("Foglio2", "Foglio3", "Foglio4", "Foglio5")) 'aggiungere gli altri fogli (6, 7, 8 e 9 se esistono)
         sh.Visible = xlSheetHidden
      Next
      For Each chk In ActiveSheet.CheckBoxes
        If chk.Value = 1 Then
              Worksheets("Foglio" & Range(chk.LinkedCell).Row).Visible = True
        Else
          Worksheets("Foglio" & Range(chk.LinkedCell).Row).Visible = False
        End If
      Next
      Set ws = Nothing
      Set chkCaller = Nothing
      
    End Sub



  • di paul (utente non iscritto) data: 04/07/2016 16:22:01

    scusami mi sarò espresso male.

    comunque nel primo codice potevo selezionare, scopriva i fogli ma rimaneva nel foglio1. ora nel foglio di excel quando fai check, scopre il foglio checkato, entra nel foglio e da "errore di run-time 9 indice non incluso nell'intervallo"
    mentre nel debug da "errore di run-time 1004 metodo Checkboxes dell'oggetto _worksheet non riuscito"



  • di patel data: 04/07/2016 19:16:23

    non avrai aggiornato la lista dei fogli, per non aver questa noia prova questa
     
    Sub CheckBoxscheda() ' multi select
      Dim ws As Worksheet
      Dim chk As CheckBox
      Dim chkCaller As CheckBox
      Dim sh As Worksheet
      
      Set ws = ActiveSheet
      Set chkCaller = ws.CheckBoxes(Application.Caller)
      For Each sh In Sheets
         If sh.Name <> "Foglio1" Then sh.Visible = xlSheetHidden
      Next
      For Each chk In ActiveSheet.CheckBoxes
        If chk.Value = 1 Then
              Worksheets("Foglio" & Range(chk.LinkedCell).Row).Visible = True
        Else
          Worksheets("Foglio" & Range(chk.LinkedCell).Row).Visible = False
        End If
      Next
      Set ws = Nothing
      Set chkCaller = Nothing
      
    End Sub
    






  • di paul (utente non iscritto) data: 05/07/2016 08:49:29

    all'inizio non andava poi dopo avere selezionato e deselezionato il check un paio di volte ora va.
    grazie mille dell'aiuto.



  • di paul0101 data: 05/07/2016 14:56:50

    ho risolto aggiungendo la visualizzazione del foglio 1 dentro al ciclo.

    però all'inizio io avevo dato dei nomi ai fogli e ora vedo che nel ciclo è associato foglio+la riga del check.
    se io chiamo per esempio i fogli con nome:" pippo, pluto, paperino " come devo modificare il worksheets visible true?

    x es:
    pippo check
    pluto check
    paperino check

    se voglio che mi si apra il foglio pippo come devo fare?



  • di paul0101 data: 05/07/2016 15:05:54

    ho risolto aggiungendo la visualizzazione del foglio 1 dentro al ciclo.



  • di Vecchio Frac data: 05/07/2016 15:07:36

    Il trucco dell'indice numerico è studiato proprio per facilitare l'indicizzazione e il riferimento ai fogli visto che le check boxes sono linkate a una determinata cella.
    Questa tua precisazione cambia un po' le carte in tavola.





  • di paul0101 data: 05/07/2016 15:11:37

    eh lo so. alla fine mentre aspettavo la risposta ho risolto semplicemente tirando via il "foglio".
    grazie comunque



  • di scossa data: 05/07/2016 15:50:20

    cit.: "se io chiamo per esempio i fogli con nome:" pippo, pluto, paperino " come devo modificare il worksheets visible true? "

    Premessa: i fogli da nascondere/scoprire devono essere dopo il Foglio1 (dal 2 al ....) ed il nome presente in colonna A a fianco alla checkbox deve corrispondere a al nome nel cavalierino.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)


     
    Sub CheckBoxscheda()
      Dim ws As Worksheet
      Dim chk As CheckBox
      Dim chkCaller As CheckBox
      Dim sh As Worksheet
      
      Set ws = ActiveSheet
      Set chkCaller = ws.CheckBoxes(Application.Caller)
      For Each sh In Sheets(Array(2, 3, 4, 5)) 'aggiungere gli altri fogli (6, 7, 8 e 9 se esistono)
         sh.Visible = xlSheetHidden
      Next
      For Each chk In ActiveSheet.CheckBoxes
          Worksheets("" & Range(chk.LinkedCell).Offset(0, -2).Value).Visible = IIf(chk.Value = 1, True, False)
      Next
      Set ws = Nothing
      Set chkCaller = Nothing
      
    End Sub