Pagina 1 di 1

[Risolto] Richiamare il valore di una CeckBox tramite codice

Inviato: venerdì 9 aprile 2021, 17:19
da Biagio91
Ciao a tutti,
Vorrei provare ad assegnare ad una ceckbox una macro all'evento click del mouse. Nella macro si indaga se il valore della ceckbox è true o false e si restituisce il valore in una msgbox.

Sto cercando di scriverne il codice ma non ne vengo fuori.

Sub ProvaValoreCeckBox
FoglioAttivo = ThisComponent.CurrentController.ActiveSheet
If FoglioAttivo.ceckbox = True Then
MsgBox "CkBox flaggata"
Else
MsgBox "CkBox non flaggata"
End If
End Sub

Ma mi va in errore....so che sembra banale...ho cercato di arrangiarmi ma....non vorrei fare danni.
Presumo che io debba definire la "ceckbox" in qualche modo, oppure che sto affrontando l'argomento nel modo sbagliato.

Un aiutino?

Grazie mille
Ciao

Re: Richiamare il valore di una CeckBox tramite codice

Inviato: sabato 10 aprile 2021, 9:20
da patel
parli di evento clic, ma dove clicchi ? se clicchi sulla checkbox ne cambi lo stato. Spiegati meglio e allega un file di esempio.
E poi non puoi inventarti il codice, documentati sui testi di Pitonyak.

Re: Richiamare il valore di una CeckBox tramite codice

Inviato: sabato 10 aprile 2021, 9:21
da lucky63
Biagio91 ha scritto:Un aiutino?
Macro da collegare all'evento "Stato modificato" della casella di controllo.

Codice: Seleziona tutto

Sub IntercettaStatoCasellaDiControllo(Evento)
Rem Link del quesito: https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=11177
Rem Macro da collegare all'evento "Stato modificato" della casella di controllo
Rem ---------------------------------------------------------------------------------
Rem Acquisisci la proprietà "Stato" della casella di controllo
StatoCeckBox = Evento.Source.State
Rem Verifica se valore 0 oppure 1 (0 = Senza Spunta/Flag  -  1 = Con Spunta/Flag)
If StatoCeckBox = 0 Then
   StatoCB = "NON flaggata"
   else
   StatoCB = "flaggata"
End if
Rem Visualizza messaggio di riscontro
MsgBox ("CkBox " & StatoCB, 0 , "Stato della CeckBox")
End sub

Re: Richiamare il valore di una CeckBox tramite codice

Inviato: sabato 10 aprile 2021, 9:44
da patel
Ciao lucky, ovviamente funziona, ma a che serve ?

Re: Richiamare il valore di una CeckBox tramite codice

Inviato: sabato 10 aprile 2021, 10:21
da lucky63
patel ha scritto:Ciao lucky, ovviamente funziona, ma a che serve ?
Ciao.
Ovviamente così come impostata non serve a nulla.
Posso solo immaginare che @Biagio91 voglia in realtà far eseguire specifiche istruzioni in funzione dello stato della CeckBox ...

Re: Richiamare il valore di una CeckBox tramite codice

Inviato: sabato 10 aprile 2021, 11:34
da Biagio91
Ciao Patel,
Grazie mille per l'interessamento, purtroppo ho cercato sul pitonyak e non avevo trovato nulla del genere, magari ho cercato troppo superficialmente ma ho eseguito la ricerca Ctrl+F sia per CeckBox che per Flag e non ho trovato quanto desiderato. Forse avrei dovuto cercare meglio ma non mi veniva in mente come recuperare l'informazione...Ora mi è venuto in mente che magari potevo guardare se esisteva una sezione relativa ai controlli del formulario e magari li avrei trovato il nome con cui vengono identificate le ceckbox in openoffice calc...e magari quindi avrei trovato qualche esempio. Lo farò lo stesso, male non farà di certo.


Ciao luky63,
Grazie mille, e si è esattamente quello che devo fare, infatti nell'If StatoCB = 0 farò eseguire una istruzione al posto di far comparire la MsgBox che mi è servita come riscontro per capirne il funzionamento.
Una curiosità, quindi ora se volessi per assurdo richiamare questo codice dentro un'altra macro dovrei semplicemente utilizzare

Call "IntercettaStatoCasellaDiControllo(Evento)" oppure "call IntercettaStatoCasellaDiControllo" senza (Evento)

Grazie mille

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: sabato 10 aprile 2021, 13:06
da Biagio91
la ricerca Ctrl+F sia per CeckBox
ceckbox non si scrive così ma bensi scrive con la h...checkbox...che idiota...per questo non trovavo nulla...ora qualcosa ho trovato..esempi un po' complessi, comunque si qualcosa c'è.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: sabato 10 aprile 2021, 13:20
da lucky63
.
Gestita normalmente:

Codice: Seleziona tutto

Sub VerificaStatoCheckBox
Rem Link del quesito: https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=11177
Doc = ThisComponent
FoglioAttivo = Doc.CurrentController.ActiveSHeet           ' Il Foglio attivo
Formulario = FoglioAttivo.drawpage.forms.getbyindex(0)     ' Il primo formulario
CheckBox = Formulario.getbyName("Casella di controllo 1")  ' Il controllo con tale nome
Stato = CheckBox.State                                     ' Il suo stato
Etichetta = CheckBox.Label                                 ' La sua etichetta
Rem Verifica se (0 = Senza Spunta/Flag  -  1 = Con Spunta/Flag)
If Stato = 0 Then
   StatoCB = "NON spuntato/flaggato"
   Else
   StatoCB = "spuntato/flaggato"
End If
Rem Visualizza messaggio di riscontro
Msgbox(Etichetta & "  " & StatoCB , 0 , "Stato della CheckBox")
End SUb
.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: sabato 10 aprile 2021, 13:50
da Biagio91
Grazie mille, mi sarà molto utile.

Sto cercando di far proteggere/sproteggere delle celle e nascondere/mostrare delle righe, in funzione dello stato della ceckbox.


Ho fatto un file di esempio con il codice che sono riuscito a scrivere prendendo vari spunti, che però non mi funziona...mi mostra/nasconde solamente la riga 11, e anche flaggando la ck1, cosa non voluta; inoltre, mi sprotegge tutto il foglio e non lo riprotegge.

Allego file esempio

Grazie mille se riesci a darmi un aiuto.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 10:19
da lucky63
Biagio91 ha scritto:mostrare delle righe, in funzione dello stato della ceckbox
Nell'esempio non hai indicato questa condizione.
Specifica quando deve avvenire.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 11:23
da Biagio91
Penso di aver capito cosa intendi, ho provato a sostituire il codice originale con il seguente che mi è anche più affine:

Codice: Seleziona tutto

Sub IntercettaStatoCkBoxMostraNascondiRigheProteggiSproteggiCelle(Evento)

Dim Doc as Object
Dim FoglioAttivo as Object

Doc = ThisComponent
FoglioAttivo = Doc.CurrentController.ActiveSheet
RigheTipo2 = 10',20,30,40,50,60 ecc sempre +10 fino a 100
RigheTipo3 = 11',21,31,41,51,61 ecc sempre +10 fino a 101

StatoCeckBox = Evento.Source.State
Rem Verifica se valore 0 oppure 1 (0 = Senza Spunta/Flag  |  1 = Con Spunta/Flag)
   
   'Togliere protezione al foglio attivo
   FoglioAttivo.UnProtect("ciao")
	
	'Definire le celle che si desiderano proteggere
	nTipo1 = FoglioAttivo.getCellRangeByName("D4")	
	nTipo2 = FoglioAttivo.getCellRangeByName("D5")	
	nTipo3 = FoglioAttivo.getCellRangeByName("D6")	

	NomeCkBox = Evento.Source.Model.Name 
	If NomeCkBox = ck1 then
		If StatoCeckBox = 0 Then 'CkBox NON Flaggata
			nTipo1.CellProtection.IsLocked = True
		Else 	nTipo1.CellProtection.IsLocked = False
		EndIf
	ElseIf NomeCkBox = ck2 then
	nTipo2.CellProtection.IsLocked = True
		If StatoCkBox = 0 Then 
		nTipo2.CellProtection.IsLocked = True
		FoglioAttivo.Rows(RigheTipo2).IsVisible = True
		Else	nTipo2.CellProtection.IsLocked = False
		FoglioAttivo.Rows(RigheTipo2).IsVisible = False
		EndIf

	ElseIf NomeCkBox = ck3 then
	nTipo3.CellProtection.IsLocked = True
		If StatoCkBox = 0 Then 
		nTipo3.CellProtection.IsLocked = True
		FoglioAttivo.Rows(RigheTipo3).IsVisible = True
		Else	nTipo3.CellProtection.IsLocked = False
		FoglioAttivo.Rows(RigheTipo3).IsVisible = False
		EndIf
	Else
End If
	
	'Attivare protezione foglio attivo
    FoglioAttivo.Protect("ciao")

End Sub
Purtroppo, questo giro non mi va in errore, ma non succede nulla....presumo di star sbagliando qualcosa con il "CellProtection"

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 12:11
da lucky63
Biagio91 ha scritto:mostrare delle righe, in funzione dello stato della ceckbox
Lascia stare il codice.
Con riferimento all'esempio che hai postato voglio che me lo chiarisci a parole tue (semplici semplici).

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 15:06
da Biagio91
Ok ci provo.

Apro il file, il foglio del File risulta Protetto.
Le CheckBox sono senza spunta/flag
Le righe 10 e 11 sono nascoste

L'utente prova a scrivere sulla cella D4.. non si può, il foglio è protetto e quelle celle (D4:D6) risultano protette.
Utente modifica lo stato della checkbox relativa alla riga in cui vuole immettere il dato; ck1 sarà relativa a D4 e così via..
Su stato modificato della Checkbox si esegue la macro che in funzione dello stato e del nome della checkbox origine dell'evento esegue il codice prestabilito.
Esempio: ck1 cambia stato passando da non flaggata a Spuntata. quindi la macro deve permettere di scrivere sulla cella D4, ma non sul resto delle celle protette di quel foglio. Il foglio deve rimanere in modalità protetta.
Se la spunta viene messa su ck2 e/o ck3 allora la macro farà uguale per D5 e/o D6, inoltre mostrerà la riga 10( x D4 D5) e/o la riga 11 (x D5 D6).
Al contrario, se la spunta viene rimossa, allora le celle corrispondenti dovranno tornare protette e le righe 10 e/o 11 dovranno tornare nascoste.


Spero di essere stato abbastanza semplice ma allo stesso tempo di essermi espresso correttamente.

Intanto, Grazie mille per l'interessamento lucky63.

Ciao

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 18:16
da lucky63
Non rispecchia l'esempio precedente nel quale le righe 10-11 sono inizialmente visibili e chiedi di nasconderle se la ck interessata come riferimento (rispettivamente ck2-ck3) viene flaggata.

Notare infatti che nell'esempio avevi scritto:
“… D4:D6 inizialmente Protette, si vuole che ci si possa scrivere solo se la relativa ckBox è flaggata.
E se la ckBox è flaggata, e non è la ck1, allora nascondere le righe 10 e 11 relativamente per la ck2 e ck3
...”

Che quindi per quanto riguarda il cosa nascondere interpreto così.
Se flag è su:
- ck1 NON nascondi niente
- ck2 nascondi riga 10
- ck3 nascondi riga 11

Quindi immaginavo alla mia richiesta di quando mostrare le righe (volevo solo la conferma) rispondessi con un semplice :
- mostrare riga 10 quando ck2 non è flaggata;
- mostrare riga 11 quando ck3 non è flaggata.

Per quanto riguarda il cosa nascondere ora invece hai invertito le parti e non comprendo quanto segue:
Biagio91 ha scritto:inoltre mostrerà la riga 10( x D4) e/o la riga 11 (x D5)
che non ha molto senso ed è anche sbagliata la corrispondenza di riferimento ck? e credo forse intendevi dire mostrerà riga 10 x ck2 flaggata (corrispondente alla cella D5 in cui poter scrivere) e riga 11 x ck3 flaggata (corrispondente alla cella D6 in cui poter scrivere).
.
Come procedo con la prima versione o la seconda e se è la seconda chiarisci quest'ultimo passaggio.
.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 19:22
da Biagio91
:facepalm:
....scusa....ho il cervello in pappa in questi giorni...e si che ho riletto parecchie volte prima di inviare... rifaccio il secondo post con le correzioni adeguate e con i riferimenti corretti.

Partendo dal file vuoto ma con la macro già inserita, Apro il file, il foglio del File risulta Protetto.
Le CheckBox sono senza spunta/flag
Le righe 10 e 11 sono nascoste (nel file esempio le due righe sono mostrate in quanto si voleva renderle visibili per rendere più comprensibile il file....ma effettivamente è la condizione in cui le ckbox sono NON flaggate, quindi dovrebbero essere nascoste.)

Si può prescindere dal fatto che il file abbia in principio le righe visibili o non visibili, oppure sull'evento stato modificato può dare problemi??
In ogni caso:

Flag ck1, corrispondente al dato in D4 -> D5
 Editato: Flag ck1, corrispondente al dato in D4 -> D4 sprotetta, foglio protetto 
Flag ck2, corrispondente al dato in D5 -> riga 10 visibile, D5 sprotetta, foglio protetto
Flag ck3, corrispondente al dato in D6 -> riga 11 visibile, D6 sprotetta, foglio protetto


Al contrario, se la spunta non è presente o viene rimossa, allora le celle corrispondenti dovranno essere o tornare protette e le righe 10 e/o 11 dovranno tornare nascoste.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 21:10
da lucky63
.
Conferma quanto segue:
Biagio91 ha scritto:Flag ck1, corrispondente al dato in D4 -> D5 sprotetta, foglio protetto
O intendevi:
Flag ck1, corrispondente al dato in D4 -> D4 sprotetta, foglio protetto
.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: lunedì 12 aprile 2021, 23:03
da Biagio91
D4 -> D4 sry

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 8:42
da lucky63
.
Vedi i commenti nella macro.
.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 12:52
da Biagio91
Hei, grazie mille, ho fatto vari test e funziona tutto alla perfezione.
Ho afferrato il concetto di tutti i passaggi con i commenti che mi hai messo, sei stato gentilissimo.

Ora devo fare in modo che le righe da nascondere siano quelle effettive del mio file ovvero: a partire dalla 10 e 11, anche la 20,21 la 30,31 ecc.. quindi in pratica con un intervallo di 10 righe da saltare fisso.
Provo a riuscirci da solo...se non riesco posso domandarti?

Grazie mille ancora.
Ciao

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 14:12
da lucky63
Biagio91 ha scritto:Ora devo fare in modo che le righe da nascondere siano quelle effettive del mio file .... in pratica con un intervallo di 10 righe da saltare fisso.
Ciclo for/next step 10 ti dice nulla.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 15:22
da Biagio91
Eh si infatti per quello volevo provarci da solo....ma sto sbagliando qualcosa....
ho scritto così:

Codice: Seleziona tutto

Sub Prova
'Nascondo riga 10, aumento di 10 il numero di riga da nascondere, nascondo riga 20, aumento di 10 la riga da nascondere nascondo riga 30 ecc... fino a riga 100
'Definire ValoreIniziale e avere in una msgbox 10,20,30 ecc qunidi 0+10 e avanti fino a 100

RifRigheCB2=10
For RifRigheCB2(i)=10 to 100 Step 10
'Parte dove si nascondono le righe richiamandole con RifRigheCB2
Next

Print RifRigheCB2
Stop



End Sub
Ma sbaglio qualcosa perché nel print msg mi compare solamente il numero 110 che tra l'altro non dovrebbe esserci perché volevo fermare il tutto a 100. E che cavolo

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 17:43
da lucky63
.
Ho adeguato il file con il ciclo for/next step 10.
Fai test.
.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 19:22
da Biagio91
Perfetto, funziona tutto alla perfezione. e ho capito dove sbagliavo.

Grazie mille

Una domanda, come si dovrebbe fare indicativamente per avere il riscontro di quello che sta effettivamente elaborando il ciclo for next?
io provavo a fare:

PR=10
For Riga = PR0 to 100 Step 10
'Parte dove si nascondono le righe richiamandole con RifRigheCB2
Print PR
Stop
Next

Ma mi compare nella msgbox solamente 10,
anche se il print lo porto fuori, quindi così:

PR=10
For Riga = PR0 to 100 Step 10
'Parte dove si nascondono le righe richiamandole con RifRigheCB2
Next
Print PR
Stop

??
Grazie mille lucky63

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 20:34
da lucky63
Biagio91 ha scritto:Perfetto, funziona tutto alla perfezione. e ho capito dove sbagliavo.
Ok grazie del riscontro.

Per lo "stop" che hai inserito all'interno del ciclo considera che blocca il ciclo al primo giro (abbastanza intuitivo e ci potevi arrivare facilmente).
Poi sbagli anche nell'usare PR0 che è diverso da PR.
PR = 10 ma se PR0 non è stato definito prima PR0 sarà uguale a 0.
Inoltre ricorda che in codice la cella A1 corrisponde a (0,0) (Colonna,Riga).
La riga 0 in codice corrisponde alla riga 1 a video
La riga 10 corrisponde alla riga 11 a video
...
Prova:

Codice: Seleziona tutto

PR=10
For Riga = PR to 100 Step 10
'Altre istruzioni
Print Riga 'o altro che vuoi verificare ..
Next
Ricordi il post iniziale ...
Biagio91 ha scritto:Un aiutino? Grazie mille
Nel complesso siamo già andati molto oltre e fuori argomento.
Per altre esigenze apri nuovo post che qui ho già dato anche troppo.
Non credi ???
.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 20:42
da Biagio91
Yess man...
hai ragione, mi sono fatto prendere dall'emozione.
Chiudo qui.
Scusa per il refuso PR0 e per l'infinità di domande.

P.S. Sono riuscito ad avere il riscontro voluto dal Print, inserendolo all'interno del ciclo.
Anche oggi ho imparato qualcosa di nuovo.

Grazie mille ancora.

Re: [Risolto] Richiamare il valore di una CeckBox tramite co

Inviato: martedì 13 aprile 2021, 20:52
da lucky63
Biagio91 ha scritto:Sono riuscito ad avere il riscontro voluto
Ok