Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Lavorare con gli oggetti Excel (ottava parte)

Premessa

Come già visto nelle lezioni precedenti, i requisiti fondamentali per poter interagire con gli oggetti di Excel sono due: avere installato una copia di Microsoft Excel ed aver precedentemente caricato la libreria oggetti di Excel disponibile nella finestra di dialogo Riferimenti. Per una maggiore comprensione, la finestra si apre cliccando sulla voce Progetto del menu principale e selezionando dal menu Progetto che si aprirà, la voce Riferimenti che è quella accompagnata dall'icona dei libri. Basterà poi selezionare la voce Microsoft Excel Object Library per poter utilizzare tutti gli oggetti di cui la libreria in questione si compone.

Quando il foglio di lavoro viene protetto, è possibile aggiungere una nuova forma di sicurezza che consiste nel rendere invisibili le formule delle celle, anche se queste vengono selezionate dall'utente.
Per eseguire tale operazione si utilizza la proprietà FormulaHidden che si chiama in causa nel seguente modo:

foglioExcel.Range("A1", "D4").FormulaHidden = True

questo dimostra che non è necessario procedere cella per cella ma si può agevolmente nascondere la formula di un intero Range di celle. Naturalmente per disabilitare la proprietà basta impostarla su False.
Se ad esempio selezioniamo un Range di celle A1,D4 e assegnamo ad esso una formula comune ad esempio il prodotto tra il numero di riga e quello di colonna di ogni cella, possiamo renderci conto del risultato ottenuto mediante la proprietà FormulaHidden, in questo modo:

Set Cella = appExcel.Cells
For Each Cella In foglioExcel.Range("A1", "D4")
Cella.Formula = Cella.Column & Cella.Row
Next Cella
foglioExcel.Range("A1", "D4").FormulaHidden = True

Naturalmente per ottenere un qualsiasi risultato il foglio di calcolo deve essere protetto.
Quali sono le principali modalità di protezione di un documento Excel? Innanzitutto esiste la proprietà ProtectWindows di sola lettura e quindi non modificabile da codice, che determina se le finestre delle cartelle di lavoro sono protette o meno.
Poi abbiamo la proprietà ProtectStructure anch'essa di sola lettura che determina se la disposizione dei fogli di lavoro è bloccata.
ProtectSelection permette di impostare o eliminare la protezione sugli elementi del grafico per cui possono risultare non selezionabili tramite mouse.
ProtectScenarios invece indica solo se gli scenari del foglio di lavoro sono protetti.
ProtectionMode indica se la protezione a interfaccia utente è attiva.
ProtectGoalSeek permette di impostare o eliminare la protezione sulle coordinate del grafico.
ProtectFormatting permette di impostare o eliminare la protezione sulla formattazione degli elementi del grafico.
ProtectDrawingObjects determina se gli oggetti-disegno sono protetti.
ProtectData permette di impostare o eliminare la protezione sull'accesso alle formule delle celle.
ProtectContents determina se tutto il contenuto di un foglio è stato protetto o meno.
Nel caso dell'esempio precedente non è possibile utilizzare nessuna di queste proprietà per applicare la protezione al foglio di lavoro siccome sono proprietà di sola lettura.
Si dovrà così ricorrere al metodo Protect, dotato della seguente sintassi:

Oggetto.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly)

dove in Password si dovrà indicare la parola chiave di protezione. In DrawingObjects si indicherà invece (impostandolo su True o False) se la protezione si estende anche agli elementi di disegno del foglio di calcolo.
Contents si riferisce invece all'oggetto in questione (nel nostro caso Oggetto è il foglio di calcolo ossia foglioExcel). Nel caso di un foglio di calcolo questo parametro protegge tutte le celle.
Scenarios protegge gli scenari, impostando il parametro su True mentre UserInterfaceOnly protegge l'interfaccia utente.
Ad esempio se aggiungessimo all'esempio precedente la seguente linea di codice:

foglioExcel.Protect ("password")

otterremmo l'invisibilità delle formule di ciascuna cella come mostrato sotto:


ed in più, ad ogni tentativo di modificare il valore di qualsiasi cella, otterremmo una finestra di messaggio come quella qui sotto:


Per estendere la protezione anche alla cartella di lavoro sarà sufficiente indicare come oggetto non più foglioExcel ma cartExcel ossia l'oggetto Excel.WorkBook. Una linea di codice di questo tipo:

cartExcel.Protect ("password")

protegge tutta la cartella di lavoro. Per verificarne il grado di protezione si utilizza la proprietà HasProtection: visualizziamo una finestra di messaggio all'apertura della cartella di lavoro nel caso sia protetta:

If cartExcel.HasProtection = True Then Msgbox "La cartella è protetta"

Per determinare se la cartella di lavoro è protetta dalla scrittura (anche se tutte le formule possono essere visibili e gli oggetti-disegno o i grafici possono essere disponibili alle azioni del mouse dell'utente) si usa invece la proprietà WriteReserved:

If cartExcel.WriteReserved = True Then MsgBox "La cartella è protetta"

Nell'esercizio proposto al termine dell'articolo si potrà fare un po' di pratica nella protezione di un foglio di lavoro.
Infine vediamo il metodo PurgeChangeHistoryNow che permette di eliminare l'elenco delle ultime azioni dal registro delle modifiche della cartella di lavoro.
La sintassi è la seguente:

cartExcel.PurgeChangeHistoryNow(Days, SharingPassword)


dove Days specifica per quanto tempo si desidera mantenere le modifiche in termini di giorni e SharingPassword specifica la password, a meno che questa non sia già stata applicata caso in cui verrà ignorata.

Soluzione dell'esercizio precedente:

Dim appExcel As New Excel.Application
Dim cartExcel As Excel.Workbook
Dim foglioExcel As Excel.Worksheet
Private Sub Form_Load()
appExcel.Visible = True
Set cartExcel = Excel.Workbooks.Add
Set foglioExcel = Excel.Worksheets.Item(1)
foglioExcel.Activate
foglioExcel.Range("A2", "I9").Formula = "=INT(RAND()*(90-10)+10)"
Set cella = appExcel.Cells
For Each cella In foglioExcel.Range("A2", "I9").Cells
If cella.Value > 10 And cella.Value < 20 Then
cella.AddComment (cella.Formula)
End If
Next cella
End Sub

Esercizio:

Proponiamo in questa lezione un semplice esercizio per cominciare a prendere confidenza con i concetti appresi nell'articolo corrente e in tutti i precedenti. La soluzione dell'esercizio sarà pubblicata nel corso del prossimo articolo.

1) aprire ed attivare una nuova sessione, una cartella ed un foglio di calcolo Excel.

2) all'avvio dell'applicazione selezionare il primo foglio di lavoro, renderlo attivo e popolare il Range A1,H8 con numeri casuali interi compresi nell'intervallo (10; 30).

3) applicare al foglio di lavoro una password determinata dalla somma di tutti i valori delle celle non vuote (Range A1,H8). 4) proteggere il foglio di lavoro dalla visualizzazione delle formule delle celle Ecco un esempio di come può essere impostata l'applicazione:





Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it