Pagina 1 di 1

[Risolto] MACRO per proteggere celle in un foglio

Inviato: sabato 27 aprile 2019, 22:47
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

Re: MACRO per proteggere celle in un foglio

Inviato: domenica 28 aprile 2019, 10:16
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

Re: MACRO per proteggere celle in un foglio

Inviato: domenica 28 aprile 2019, 21:35
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 8:39
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 10:44
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



Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:27
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:30
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!

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:33
da Gaetanopr
Esatto

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:42
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?

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:44
da Gaetanopr
Ti basta associare alla casella di controllo la macro in questione, usando la proprietà State.

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:54
da Gaetanopr
Ti allego esempio

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:55
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:

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 11:58
da Raoul Duke
ah ok, la carico su "eseguire azione", giusto?

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:01
da Gaetanopr
Si, non hai visto l'esempio che ti ho allegato nel precedente messaggio?

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:11
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...

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:30
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:37
da Gaetanopr
patel, le hai sprotette prima di lanciare la macro?

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:38
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:40
da Gaetanopr
ma è normale questo comportamento, di default sono tutte protette le celle

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:47
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 12:54
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 13:00
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?

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 13:14
da patel
Gaetanopr ha scritto:patel, le hai sprotette prima di lanciare la macro?
ma all'inizio della macro c'è Foglio.Unprotect("")

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 13:18
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

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 15:09
da patel
Hai ragione, ora funziona

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 16:51
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?

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 17:16
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.

Re: MACRO per proteggere celle in un foglio

Inviato: lunedì 29 aprile 2019, 17:45
da Raoul Duke
ahahahha complimenti Gaetano!