Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
PRINCIPALE > ARTICOLO

Eseguire una ricerca veloce nell' archivio delle risorse di Visual Basic Italia®: 

Preso dall'archivio...

Premere il pulsante sotto per accedere direttamente ad un articolo o ad un esempio preso in modo casuale dall'archivio.



Ultimo e-book pubblicato:

"INTRODUZIONE AI CSS"

Lo scopo del CSS language è quello di controllare lo stile dei vari elementi che concorrono a formare un
documento HTML.
Si può operare in tre modi collegamento ad un foglio di stile esterno;definizione degli stili all'inizio
del documento utilizzo della proprietà style all'interno di un Tag HTML (embedded style). Questo e-book introduttivo
servirà per apprendere tali nozioni fondametali dei fogli di stile.

Prezzo: € 0.0.
Presentazione:
REAL SOFTWARE RILASCIA LA VERSIONE 5.0 di REALbasic per Windows






Gorizia, 5 maggio 2003 - Active, distributore in esclusiva di REALSoftware, Austin, Tx, annuncia la disponibilità di REALbasic 5.0 per Windows, uno strumento per lo sviluppo semplice da usare che permette agli utenti Windows di tutti i livelli di creare applicazioni personalizzate e di compilarle sia per la piattaforma Windows che per quella Macintosh.
[>>]

http://www.active-software.com

 

Contatti. Utilizzare l'email generica per domande relative al sito:
Porre domande relative al sito
oppure scrivere ad un responsabile di area.
Responsabile del sito: >Andrea Martelli
Responsabile area "Corso di VB":
> Giorgio Abraini

Creare un'aggiunta a MS Excel - terza parte

Questa lezione, consultata da 6051 utenti, è stata giudicata di ottimi contenuti , con un'esposizione di facile comprensione e con un livello di approfondimento buono da 119 votanti.


Il codice di Form1

In questo articolo si vedrà come rendere l'aggiunta sensibile alle modifiche apportate dall'utente sul foglio di calcolo e sull'applicazione Excel.
A tale scopo deve essere fatta una piccola modifica al progetto analizzato nell'articolo precedente: sarà necessario aggiungere un modulo (denominato per impostazione Module1) e lì dichiarare come globale la variabile oggetto appOffice.

Global appOffice As Object

Questo perchè adesso si utilizzerà anche Form1 oltre al modulo Connect: la variabile che indica l'applicazione Office deve perciò essere valida in entrambi i moduli di codice.
All'interno del modulo Module1 è inoltre possibile inserire il codice che permette all'aggiunta di essere sempre in primo piano rispetto al foglio di calcolo, per evitare che venga nascosta una volta attivato il foglio. Come mostrato nel codice presente nell'Archivio quindi:

Sub AlwaysOnTop(FrmID As Form, OnTop As Integer)
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
If OnTop = -1 Then
OnTop = SetWindowPos(FrmID.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
Else
OnTop = SetWindowPos(FrmID.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
End If
End Sub

Adesso si può passare al codice di Form1. Siccome si utilizzeranno gli oggetti propri di una sessione Excel, è necessario importare la libreria relativa all'interno dell'applicazione, come già visto negli articoli della rubrica 'Visual Basic per Excel'.
Si provi a scrivere una cosa del genere:

Dim sessioneExcel As Excel.Application
Dim cartExcel As Excel.Workbook
Dim foglioExcel As Excel.Worksheet

E si controlli nella combobox della finestra di Visual Basic quali oggetti sono a disposizione. Adesso si modifichi il codice appena visto in questo modo:

Dim WithEvents sessioneExcel As Excel.Application
Dim WithEvents cartExcel As Excel.Workbook
Dim WithEvents foglioExcel As Excel.Worksheet

E si controlli nuovamente la combobox: sono presenti tre nuovi oggetti coi relativi eventi: cartExcel, foglioExcel e sessioneExcel.

Questo perché WithEvents rende l'applicazione sensibile alle modifiche apportate sugli oggetti caratteristici di Excel.
In questo modo ad esempio si può visualizzare una finestra di messaggio ogni volta che l'utente seleziona una cella specifica e più in generale si possono utilizzare tutti gli eventi di cui si compone la libreria di Excel.

Adesso si consideri la sottoprocedura Load di Form1:

Private Sub Form1_Load()
'…
'…
'…

End Sub

Il problema ulteriore è di più difficile comprensione: nel modulo Connect è stata dichiarata e definita una variabile oggetto indicante una generica applicazione Office: appOffice.
Nel modulo di codice di Form1 invece si utilizza una seconda applicazione, sessioneExcel. Come indicare all'aggiunta che queste due applicazioni sono in realtà la stessa?
Semplicemente eguagliando le due variabili oggetto, nel seguente modo:

Set sessioneExcel = appOffice

Se infatti si fosse dichiarata sessioneExcel come in tutti gli altri articoli in questo modo:

Dim sessioneExcel As New Excel.application

si sarebbe creata una nuova sessione Excel, e ci si sarebbe quindi trovati con due applicazioni Excel: appOffice e sessioneExcel. In quel caso non si sarebbe potuto utilizzare né il foglio di calcolo dell'applicazione Excel in cui è stata caricata l'aggiunta, né la cartella di lavoro.

Altro problema: appOffice, nella quale è caricata l'aggiunta, apre automaticamente un nuovo foglio di calcolo all'interno di una nuova cartella di lavoro.
Com'è possibile indicare all'aggiunta di operare proprio su quel foglio e su quella cartella, invece di aprirne di nuovi? Attraverso gli oggetti ActiveSheet ed ActiveWorkbook:

Set cartExcel = sessioneExcel.ActiveWorkbook
Set foglioExcel = sessioneExcel.ActiveSheet

che rappresentano rispettivamente la cartella di lavoro ed il foglio di calcolo correntemente utilizzati dall'applicazione Excel.
Per chiudere la sottoprocedura, si può inserire la linea di codice che, richiamando la routine di Module1, consenta di visualizzare la finestra dell'aggiunta in primo piano rispetto al foglio di calcolo:

AlwaysOnTop Me, -1

Adesso il più del lavoro è terminato. Quello che rimane consiste solamente nell'applicazione dei concetti visti nel corso degli articoli della rubrica 'Visual Basic per Excel', riferiti questa volta ai vari eventi degli oggetti sessione Excel, cartella di lavoro Excel e foglio di calcolo Excel.

Un semplice esempio può essere rappresentato proprio da quello che era già stato anticipato: un controllo TextBox su Form1 che visualizzi il valore della cella selezionata dall'utente.
Parlando di celle si fa dunque riferimento all'oggetto foglioExcel e parlando di selezione ci si riferisce all'evento SelectionChange dell'oggetto Excel.Workbook:

Private Sub foglioExcel_SelectionChange(ByVal Target As Excel.Range)
'…
'…
'…

End Sub

dove al posto dei commenti si può inserire l'assegnazione del valore della cella alla casella di testo:

On Error Resume Next
Text1.Text = Target.Value

E' però necessario notare due cose, legate tra loro: il parametro Target dell'evento è (come indica la definizione Excel.Range) un Range, ossia un insieme di celle.
E' impossibile visualizzare pertanto il valore delle celle nella casella di testo se queste sono più di una.
Ecco la ragione della linea di codice precedente (On Error Resume Next) che serve proprio ad evitare l'errore in questi casi.
Naturalmente l'aggiunta può essere ben più complessa rispetto a questo semplice esempio ma il suo scopo è quello di rendere l'idea di come adesso sia possibile utilizzare non soltanto gli oggetti e le relative proprietà della libreria di Office, ma anche tutti gli eventi da essi supportati.

Ed il risultato di un'applicazione di questo genere può essere rappresentato graficamente dall'immagine sottostante:

Il progetto completo che costituisce l'aggiunta può essere scaricato da qui.