È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Usare una stringa come nome di una checkbox

Ultimo Aggiornamento: 12/12/2023 17:52
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

Re:


smanettando un po' sono riuscito a trovare una soluzione lineare:



ma io che avevo detto?

saluti





Domenico
Win 10 - Excel 2016
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 04:15. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com