| | Post: 1 | Registrato il: 27/01/2019
| Città: MILANO | Età: 23 | Utente Junior | Excel 2019 | | OFFLINE | |
|
08/12/2023 17:52 | |
Salve,
visto che in VBA gli oggetti non possono essere indicizzati, avevo pensato di fare una cosa del genere:
For i = 1 To 6
NomeOggetto = "chkProva" & i
If NomeOggetto.Visible = false Then
NomeOggetto.Visible = true
end if
next i
Ovviamente ero troppo ottimista ed infatti non ha funzionato un bel niente. I sei checkbox di prova (chkProva1, chkProva2,...) li avevo già creati in precedenza, ma non penso sia questo il problema.
So che c'è una soluzione, ma non sono riuscito a trovarla. Potreste aiutarmi?
Ringrazio in anticipo. |
|
| | Post: 1.164 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
08/12/2023 17:58 | |
Ciao
Perchè non puoi indicizzare un oggetto?
La seguente macro ti cambia la dicitura in tutti i CommandButton
For Each ctrl In Controls
If TypeOf ctrl Is MSForms.CommandButton Then
ctrl.Caption = "coucou"
End If
Next
Prova e fai sapere.
Ciao,
Mario
|
| | Post: 1 | Registrato il: 27/01/2019
| Città: MILANO | Età: 23 | Utente Junior | Excel 2019 | | OFFLINE | |
|
08/12/2023 18:16 | |
Ciao Mario,
grazie per la risposta, ma sinceramente non ci ho capito granché. Conosco il VBA in forma alquanto elementare, per cui ti lascio immaginare. Forse se tu potessi applicare il tuo codice al mio esempio, con un confronto tra i due potrei capirci un po' di più. Per quanto riguarda l'indicizzare, in VB posso facilmente indicizzare i checkbox o altri oggetti col .index tra le proprietà, cosa che in VBA Excel non esiste. Avevo fatto quel mio esempio proprio come workaround a questa mancanza, ma se esiste un altro metodo più semplice ben venga.
Grazie |
| | Post: 7.485 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
09/12/2023 08:10 | |
Ciao, non hai inserito un esempio ln modo che si capisse meglio il problema, parli di Checkbox sul foglio oppure in una userform?
Mario Salute, parlava di Checkbox, ma il tuo codice si adatta ad ogni oggetto quindi anche checkbox, quindi basta sostituire CommandButton
comunque sul foglio o sulla userform è lo stesso devi sempre lanciare la modifica in qualche modo, eccoti un esempio con il checkbox sul Foglio
l'ho legata al cambiamento della cella "C2"
qauesta è la macro che ho usato inserita nel modulo del foglio
Sub Cambia()
Dim d
d = Range("C2")
CheckBox1.Caption = d
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c2]) Is Nothing Then Cambia
End Sub
visto che parli di 6 Checkbox, ed ammettendo che i testi siano da C1 a C6 allora puoi usare questa, tenendo anche conto che non hai cambiato i nomi alle CheckBox, cioè siano nominati CheckBox1-2-3-etc
Sub Cambia()
Dim x
For x = 1 To 6
Controls("CheckBox" & x).Caption = Cells(x, 3)
Next x
End Sub
a questo punto con un pulsante lanci la macro Cambia che si deve trovare nel modulo del foglio dove siano le Checkbox
.Fai sapere, Ciao By Sal (8-D [Modificato da by sal 09/12/2023 08:34] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 2 | Registrato il: 27/01/2019
| Città: MILANO | Età: 23 | Utente Junior | Excel 2019 | | OFFLINE | |
|
09/12/2023 12:50 | |
Buongiorno e grazie per la risposta. Effettivamente si tratta di 6 checkbox incolonnati su un unico e semplice foglio excel, senza nessun altro codice (escludendo le varie formule impostate in alcune celle). Con la tua risposta sei riuscito ad arrivare vicino alla soluzione che mi serviva, infatti dovrei rendere visibile il checkbox in funzione del click in una determinata cella sulla stessa riga ed il tuo codice adattato andrebbe ad hoc. Peccato però che in runtime non riconosca Controls e mi restituisca un "Errore di compilazione: Sub o Function non definita" riferito a questo. Ho provato con F1, ma mi rimanda ad una CommandBar che non penso sia pertinente con tutto questo. Bisogna sicuramente definire o far riconoscere Controls in qualche maniera, ma non so come fare.
Grazie ancora. |
| | Post: 7.486 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
09/12/2023 15:07 | |
Ciao se inserisci un file d'esempio con quello che vuoi ottenere, cosi vediamo se ci riusciamo.
Ciao By Sal (8-D se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 3 | Registrato il: 27/01/2019
| Città: MILANO | Età: 23 | Utente Junior | Excel 2019 | | OFFLINE | |
|
09/12/2023 22:31 | |
Ciao, eccoti un file di esempio zippato (spero lo carichi) ed una immagine del risultato che mi ha dato eseguendolo.
Grazie
p.s: non capisco perché non lo allega, eppure è piccolissimo zippato. Comunque tutto il codice è quello che vedi [Modificato da Aironide 09/12/2023 22:38] |
| | Post: 7.487 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
10/12/2023 08:18 | |
Ciao A questo punto credo che manchi qualche libreria, prova a fare questa operazione sempre nelll'editor del VBA clicca su menu "Strumenti->riferimenti" si apre questa finestra vedi se qualche voce Spuntata all'inizio ha la scritta "MANCA", vuole diche che manca quella libreria, togli la spunta e chiudi dando OK e prova di nuovo se ancora non funziona vuole dire che devi caricare quella libreria.
Ciao By Sal (8-D [Modificato da by sal 10/12/2023 08:20] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 3.604 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
10/12/2023 11:16 | |
Ciao Sal
ma sei sicuro che con "Controls" puoi riferirti agli oggetti di un foglio??
E poi che oggetti sono: ActiveX o controlli modulo?
Poichè mi sembrano essere activeX:
Sub Cambia()
Dim x
For x = 1 To 6
Worksheets("TuoFoglio").OLEObjects("checkbox" & i).Object.Caption = Cells(x, 3)
Next x
End Sub
saluti [Modificato da dodo47 10/12/2023 11:24] Domenico
Win 10 - Excel 2016 |
| | Post: 7.488 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
10/12/2023 15:21 | |
Ciao Domenico Saluti, si se metti la macro cambia nel modulo del foglio e non in Modulo1, altrimenti gli devi dare anche l'indirizzo del foglio, sono controlli Activex quelli che ho usato, e non controlli modulo
però mi ha messo un dubbio perche l'ho provata con 1 solo Checkbox
Controllato Hai Ragione, non accetta controls ma nemmeno questo codice, credo che bisognerebbe fare un classe per farlo funzionare.
oppure indicare singolarmente i 6 checkbox visto che non sono tanti.
Sub NomeCheckBox()
Dim cb As CheckBox
For Each cb In ActiveSheet.CheckBoxes
cb.Name = "NuovoNome" & cb.TopLeftCell.Row
Next cb
End Sub
ma a parte tutto questo che vedrò di risolvere, quello che vedo e che lui se il checkbox è selezionato lo vuole rendere non visibile, cioè in effetti scompare dal foglio, ma poi chi toglie il flag dal Checkbox se è invisibile, rimarra sempre non visibile.
Ciao Salvatore (8-D [Modificato da by sal 10/12/2023 15:52] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 4 | Registrato il: 27/01/2019
| Città: MILANO | Età: 23 | Utente Junior | Excel 2019 | | OFFLINE | |
|
10/12/2023 16:33 | |
Ciao a tutti,
smanettando un po' sono riuscito a trovare una soluzione lineare:
Dim Foglio As Worksheet
Dim chkbox As MSForms.CheckBox
Set Foglio = ThisWorkbook.Worksheets("Foglio1")
For i=1 to 6
Set chkbox = Foglio.OLEObjects("checkbox" & i ).Object
chkbox.Visible = false
next i
Il codice di prova che ho inviato non ha una logica, era solo per testare la possibilità di gestire i singoli oggetti.
Comunque grazie a tutti. [Modificato da Aironide 10/12/2023 16:35] |
| | Post: 3.627 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
12/12/2023 17:52 | |
smanettando un po' sono riuscito a trovare una soluzione lineare:
ma io che avevo detto?
saluti
Domenico
Win 10 - Excel 2016 |
|
|