Indicatore stato del foglio

Sto creando una struttura di fogli elettronici, per gestire un piccolo magazzino, con funzioni, filtri e macro per rendere il tutto più semplice possibile.
Ecco che mi ritrovo per l’ennesima volta davanti a un problema che pensavo risolvere in poco e invece… niente! tutto dato sicuramente dalla complessità del linguaggio di scrittura propietario Basic in Calc…
In breve, mi sto cimentando nel creare un modo per indicarmi se lo stato del foglio Calc è protetto o sbloccato.
Ho quindi creato una geometria da "Inserisci>Forma>Forma base>Cerchio, e l’ho piazzata in bella vista, dopo avergli assegnato il nome “LUL”.
Provo a generare una macro che faccia diventare di colore rosso questa geometria, se il foglio è protetto; di colore verde se il foglio è sbloccato.
REM ***** BASIC *****

Sub LUL()
Dim oSheet As Object
Dim oCell As Object
Dim oShape As Object

oSheet = ThisComponent.getCurrentController().getActiveSheet()

oShape = oSheet.getDrawPage().getByName("LUL")

If oSheet.IsProtected Then
    oShape.FillColor = RGB(255, 0, 0) ' Rosso
Else
    oShape.FillColor = RGB(0, 255, 0) ' Verde
End If

End Sub
Ma ricevo l’errore di sintassi “getByName” non è trovata come funzione.
Cosa sto sbagliando?
Un grazie di cuore a chi mi aiuterà!!

Se il foglio di lavoro è protetto, non è possibile modificarlo.

Il Drawpage di un foglio Calc non ha un metodo getByName() (XNameAccess non supportato).
Ottieni una forma controllandone il nome usando l’iterazione, vale a dire:

	oSheet = ThisComponent.getCurrentController().getActiveSheet()
	oDrawPage = oSheet.getDrawPage()
	
	for i = 0 to oDrawPage.Count-1
		oShape = oDrawPage.getByIndex(i)
		if oShape.Name = "LUL" then
			If oSheet.IsProtected Then
 				oShape.FillColor = RGB(255, 0, 0) ' Rosso
			Else
				oShape.FillColor = RGB(0, 255, 0) ' Verde
			End If
			exit for
		end if
	next

Vedi il file allegato (contiene una macro).
fileTEST.ods (9.9 KB)

1 Like

Ciao cwolan… ciao tutti.
Intanto grazie per la pazienza; adesso faccio qualche prova e, funziona o no, farò sapere.

GesMag_esempio.ods (78.5 KB)
Allora cwolan,
quello che mi hai allegato, è praticamente quello che vorrei ottenere…
Allego un file, che per quanto denudato, è quello che uso. Come puoi vedere, ho attribuito una macro a delle forme (lucchetti), che blocca il foglio con una password fissa, e si sblocca con la stessa psw.
A me non interessa l’inviolabilità del foglio… questo è stato fatto solo per evitare modifiche accidentali (da parte di certi individui che proprio non riescono a non “smanettare” diciamo; non sono l’unico utilizzatore di questo file,purtroppo) , e per avere per quanto possibile un aspetto più professionale…
Perche fare tutto questo, se infine sotto, si vede il lucchetto nel “unghietta” ? Semplicemente perche nel file finale le “unghiette”, perche ci saranno più pagine, ho deciso di renderle non visibili.
Vorrei avere in questo modo quindi, la situazione a colpo d’occhio.
Ora per quanto mi sforzi, leggendo il codice che mi hai scritto, non riesco a capire come attribuire il codice ai pulsanti dei lucchetti (che suppongo, possano avere la stessa funzione del tuo bottone “Cambia Colore”) ; in modo che la forma “LUL”, faccia la stessa cosa dimostrata nel tuo file.
Considera che ho poca conoscenza del codice basic (vado avanti con macrorecorder e intuito),
ti chiedo quindi: è fattibile con le impostazioni del mio file?
Grazie ancora per la tua pazienza!!

Ciao, prova il file in allegato clicca sul lucchetto.
Shape_Protect_UnProtect_Gaetanopr.ods (77.6 KB)

1 Like

GesMag_es_Gaetano.ods (78.1 KB)
Ciao gaetanopr, ciao tutti!
Allora, devo dire che la tua soluzione rispecchia esattamente quello che io volevo ottenere…GRANDE!
Vedere il lucchetto bloccato/sbloccato, è la soluzione. E infatti funziona!
Allego di nuovo il file con il tuo codice.

Tramite l’aiuto di “schiavinatto”, ero però riuscito a fare altre 2 cose importanti per me;

  1. Nel momento che io voglio sbloccare il foglio, quindi cliccando sul lucchetto, devo inserire la psw (fissa) manualmente (tramite il form ovviamente) per sbloccare il foglio.
  2. Fatte le eventuali modifiche, cliccando sul lucchetto (per bloccare il foglio nuovamente), il stato del foglio passa a “salvato”(save), senza doverlo fare manualmente.
    Ora, come ho scritto precedentemente il blocco con psw serve a evitare modifiche “accindentali”…
    Se però lo sblocco del foglio può essere fatto dal semplice click sul lucchetto, capiamo che una volta imparato questo… i smanettoni si daranno alla pazza gioia.
    E chiaro quindi, che per quanto la psw di blocco sia fissa, non sarà divulgata… proprio per evitare questo.
    Ho provato a integrare il codice delle precedenti macro, ma ricevo sempre l’errore di sintassi.

Riesci a darmi una mano in questo contesto?
Grazie per la tua pazienza!!

Ok, è abbastanza semplice, quando devi bloccare ti basta richiamare la macro SbloccaMag che a sua volta richiama la finestra di dialogo per l’inserimento della pw, questo al posto della riga di codice con la password inserita Sheet.UnProtect(“123456”).
Per quanto riguarda il salvataggio ti basta aggiungere questa istruzione ThisComponent.Store
Nel file allegato ci ho pensato io a farlo.

Saluti
GesMag_es_Gaetano.ods (77.5 KB)

2 Likes

Gaetano, grazie mille… sei stato gentilissimo con il tuo aiuto; tutto funziona esattamente come volevo!
Un ultima domanda; mi puoi consigliare, dove poter imparare in modo efficace un pò del linguaggio basic di libreoffice? Non sò, qualche libro/manuale… lo sò che su internet c’è tanto, trovo però che sia sempre o troppo superficiale, o troppo per scontato. Se vuoi rispondimi… non sentirti obbligato.
Grazie ancora per il tuo aiuto!!