[Risolto] MACRO per proteggere celle in un foglio

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

[Risolto] MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

Salve, ho letto che per proteggere alcune celle e renderne modificabili altre bisogna prima proteggere il foglio e poi sbloccare le celle che si desidera rendere modificabili. ho provato questo codice ma non funziona né per le singole celle né per i range.
qualcuno sa come mai?

Codice: Seleziona tutto

Sub Proteggi
  Doc    = thisComponent
  Foglio = Doc.sheets.getByName("Foglio1")
  Foglio.protect("")
  Cell=Foglio.getCellByposition(2,7)
  Cell.CellProtection.IsLocked = false
  Range=Foglio.getCellRangeByposition (0,1,2,6)
  Range.CellProtection.IsLocked = false
End Sub
Allegati
PROVA.ods
(14.89 KiB) Scaricato 163 volte
Ultima modifica di Raoul Duke il lunedì 29 aprile 2019, 17:46, modificato 1 volta in totale.
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: MACRO per proteggere celle in un foglio

Messaggio da patel »

Tu proponi un codice non funzionante senza dire cosa vuoi ottenere, quali sono le celle modificabili e quali quelle protette?
comunque devi prima definire il range modificabile e poi proteggere il foglio
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

le celle da tenere modificabili sono quelle definite dalle variabili Cell (2,7) e Range (0,1,2,6).
quindi dici di scrivere cosi?

Codice: Seleziona tutto

Sub Proteggi
  Doc    = thisComponent
  Foglio = Doc.sheets.getByName("Foglio1")
  Cell=Foglio.getCellByposition(2,7)
  Cell.CellProtection.IsLocked = false
  Range=Foglio.getCellRangeByposition (0,1,2,6)
  Range.CellProtection.IsLocked = false
  Foglio.protect("")
End Sub
perchè anche ordinando le dichiarazioni in questo modo non mi funziona. rimangono tutte le celle non modificabili, anche cell e range
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: MACRO per proteggere celle in un foglio

Messaggio da patel »

prova questa

Codice: Seleziona tutto

Sub Proteggi
  Doc    = thisComponent
  Foglio = Doc.sheets.getByName("Foglio1")
  Foglio.unprotect("")
  cp = Foglio.getCellByposition(2,7).CellProtection
  cp.IsLocked = FALSE
  Foglio.getCellByposition(2,7).CellProtection = cp
  cp=Foglio.getCellRangeByposition (0,1,2,6).CellProtection
  cp.IsLocked = false
  Foglio.getCellRangeByposition (0,1,2,6).CellProtection=cp
  Foglio.protect("")
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

Funziona perfettamente!
ma mi puoi spiegare la logica, così posso rifarlo in altri punti?
in particolare non capisco il significato delle righe commentate con i punti interrogativi

Codice: Seleziona tutto

sub Proteggi
  Doc    = thisComponent
  Foglio = Doc.sheets.getByName("Foglio1")
  Foglio.unprotect("")
  cp = Foglio.getCellByposition(2,7).CellProtection  'definisco la cella da rendere modificabile
  cp.IsLocked = FALSE                                             'dichiaro che sarà modificabile
  Foglio.getCellByposition(2,7).CellProtection = cp  '???????
  cp=Foglio.getCellRangeByposition (0,1,2,6).CellProtection  'dichiaro il range che sarà modificabile
  cp.IsLocked = false                                              'dichiaro che sarà modificabile
  Foglio.getCellRangeByposition (0,1,2,6).CellProtection=cp '???????
  Foglio.protect("")
End Sub


OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Una formula più sintetica è questa

Codice: Seleziona tutto

Sub Proteggi
Dim PC As New "com.sun.star.util.CellProtection"
  Doc    = thisComponent
  Foglio = Doc.sheets.getByName("Foglio1")
  Foglio.Unprotect("")
  PC.IsLocked = False
  Foglio.getCellByposition(2,7).CellProtection = PC
  Foglio.getCellRangeByposition (0,1,2,6).CellProtection = PC
  Foglio.protect("")
End Sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

ah quindi quando definisco un range seguito da .cellprotection e lo pongo uguale a pc, mi rende quel range modificabile o meno (a seconda se ho definito pc.islocked vero o falso), giusto?
grazie mille!
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Esatto
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

Pensavo di inserire una casella di controllo (di quelle spuntabili per capirci) nel documento che quando è selezionata consente le modifiche e quando non lo è le vieta.
ho creato le due macro (che in pratica differiscono solo per il fatto che in una pc.islocked è true e nell'altra false) ma non ho capito come assegnarle allo stato della casella. sapete come si fa?
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Ti basta associare alla casella di controllo la macro in questione, usando la proprietà State.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Ti allego esempio
Allegati
PROVA (2).ods
(12.89 KiB) Scaricato 171 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

e dove la trovo questa proprieta?
in modo bozza on, clicco cul destro sulla casella di controllo e poi? campo di controllo?!? :roll:
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

ah ok, la carico su "eseguire azione", giusto?
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Si, non hai visto l'esempio che ti ho allegato nel precedente messaggio?
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

si, grazie! avevo scritto prima che mi arrivasse il tuo mex con allegato.
un'ultima cosa: c'è modo di ingrandire quel quadratino della spunta? la scritta proteggi/sproteggi si ingrandisce con le dimensioni del carattere dentro campo di controllo - generale, ma il quadratino rimane piccolo...
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: MACRO per proteggere celle in un foglio

Messaggio da patel »

però c'è qualcosa che non funziona bene in questo tipo di codice, allego un file con questa macro

Codice: Seleziona tutto

Sub Proteggi2
Dim PC As New "com.sun.star.util.CellProtection"
  Doc    = thisComponent
  Foglio = Doc.sheets.getByName("Foglio1")
  Foglio.Unprotect("")
  PC.IsLocked = True
  Foglio.GetCellRangeByName("D8").CellProtection = PC
  Foglio.GetCellRangeByName("a5:D5").CellProtection = PC
  Foglio.protect("")
End Sub
non capisco perché protegge anche le celle a sfondo giallo
Allegati
ProtectRange2.ods
(10.41 KiB) Scaricato 87 volte
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

patel, le hai sprotette prima di lanciare la macro?
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

a me anche lo faceva all'inizio sul doc che hai condiviso patel, poi ho esplicitamente dichiarato islocked false le due celle in questione (solo una volta , ho eseguito il codice e poi cancellato questa dichiarazione) e in seguito non me l'ha piu fatto. probabilmente nella creazione del documento ad un certo punto le avevi dichiarate isblocked true e sono rimaste in questa cdz.
fai questa prova
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

ma è normale questo comportamento, di default sono tutte protette le celle
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

che intendi gaetano? nel doc di patel le celle vuote e con sfondobianco sono tutte non protette, anche se non è mai stato dichiarato per loro islocked false
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Raoul Duke ha scritto:..... probabilmente nella creazione del documento ad un certo punto le avevi dichiarate isblocked true e sono rimaste in questa cdz.
Le celle sono sempre IsLocked = True di default, devi essere tu tramite macro o manualmente a cambiarle in IsLocked = False

A me il file inviato da patel funziona correttamente, le celle a sfondo gialle rimangono NON PROTETTE, ma bisogna inizialmente renderle sprotette tramite macro o manualmente
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

A me il file inviato da patel funziona correttamente, le celle a sfondo gialle rimangono NON PROTETTE, ma bisogna inizialmente renderle sprotette tramite macro o manualmente
si esatto, era quello che intendevo nel mio mex.

però a questo punto visto che di defaukt islocked è true... perché succede questo:
nel doc di patel le celle vuote e con sfondobianco sono tutte non protette, anche se non è mai stato dichiarato per loro islocked=false
perchè forse sono state dichiarate in precedenza islocked=false da patel?
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: MACRO per proteggere celle in un foglio

Messaggio da patel »

Gaetanopr ha scritto:patel, le hai sprotette prima di lanciare la macro?
ma all'inizio della macro c'è Foglio.Unprotect("")
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Questo serve solo a sproteggere il foglio(non cambi lo stato di protezione delle celle) una volta riprotetto le celle rimangono sempre protette
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: MACRO per proteggere celle in un foglio

Messaggio da patel »

Hai ragione, ora funziona
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

un'ultima cosa: c'è modo di ingrandire quel quadratino della spunta? la scritta proteggi/sproteggi si ingrandisce con le dimensioni del carattere dentro campo di controllo - generale, ma il quadratino rimane piccolo...
invece qualcuno sa come fare sta cosa?
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: MACRO per proteggere celle in un foglio

Messaggio da Gaetanopr »

Non si può ingrandire il quadratino, ma con qualche piccolo stratagemma si può creare una casella di controllo con una campo di testo fisso e ingrandirlo a piacimento.
Allegati
PROVA (2).ods
(13.64 KiB) Scaricato 116 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: MACRO per proteggere celle in un foglio

Messaggio da Raoul Duke »

ahahahha complimenti Gaetano!
OpenOffice 4.1.5 con MacOS 10.13.6
Rispondi