Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Marco,
Sì ogni casella deve corrispondere a quelle del foglio Formule
Riguardo il nome non ha rilevanza, l'importante che se la spunto mi da il risultato di vero nel foglio Formule, altrimenti devo cambiare tutte le formule presenti nella cartella
Ho cancellato tutte le caselle di controllo sul foglio CALCOLO e ho utilizzato la procedura Inserisci_CheckBoxes per crearne 280.
Come richiesto. ho anche modificato il mio codice in modo che si possa inserisce, o cancellare, il segno di spunta solo dalle caselle di controllo della selezionata colonna.
Quindi, in un modulo standard, incolla le seguente due procedure:
'=========>>
Option Explicit
'--------->>
Public Sub Inserisci_CheckBoxes()
Dim SH As Worksheet, SH2 As Worksheet
Dim CBox As CheckBox
Dim Rng As Range, rCol As Range, rCell As Range
Dim i As Long
Const sFoglio As String = "Calcolo" '<<=== Modifica
Const sFoglio2 As String = "Formule" '<<=== Modifica
Const sIntervallo As String = "K12:M51, V12:X51" '<<=== Modifica
With ThisWorkbook
Set SH = .Sheets(sFoglio)
Set SH2 = .Sheets(sFoglio2)
End With
On Error GoTo XIT
Application.ScreenUpdating = False
With SH
.CheckBoxes.Delete
Set Rng = .Range(sIntervallo)
For Each rCol In Rng.Columns
For Each rCell In rCol.Cells
i = i + 1
With rCell
Set CBox = .Parent.CheckBoxes.Add _
(Top:=.Top, Width:=.Width, _
Left:=.Left, Height:=.Height)
With CBox
.Name = "CheckBox" & i
.LinkedCell = SH2.Range(rCell.Offset(-2).Address). _
Address(External:=True)
.Caption = ""
End With
.NumberFormat = ";;;"
End With
Next rCell
Next rCol
End With
SH.Shapes("Horizontal Scroll1").Visible = False
XIT:
Application.ScreenUpdating = True
End Sub
'--------->>
Public Sub ToggleCheckBoxes()
Dim sCaller As String
Dim Btn As Button
Dim CBox As CheckBox
Dim iCol As Long
sCaller = Application.Caller
Set Btn = ActiveSheet.Buttons(sCaller)
iCol = Btn.TopLeftCell.Column
For Each CBox In ActiveSheet.CheckBoxes
With CBox
If .TopLeftCell.Column = iCol Then
If .Value = 1 Then
.Value = 0
Else
.Value = 1
End If
End If
End With
Next CBox
End Sub
'<<=========
La prima procedura, Inserisci_CheckBoxes, cancella ogni casella di controllo sul foglio CALCOLO poi crea una nuova collezione di 280 caselle di controllo negli intervalli K12:M51 e V12:X51 ; il codice collega le caselle di controllo alle celle degli intervalli K11:M49 e V10:X49 sul foglio FORMULE. Le nuove caselle di controllo vengono denominati CheckBox1 fino a CheckBox280.
La seconda procedura, ToggleCheckBoxes è assegnata ad ciascuno dei otto pulsanti 1-8 sopra le otto colonne di caselle di controllo. Facendo click su uno dei pulsante, si inserisce o cancella il segno di spunta dalle caselle di controllo sopra quella colonna.
A me, il tempo di esecuzione del codice viene riportato in millisecondi; il funzionamento è effetivamnente instantaneo.
Potresti scaricare il mio file di Marco20180113.xlsm.
Provalo e vedi se faccia quello che vuoi.
===
Regards,
Norman