Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Lavorare con gli oggetti Excel (sesta 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.

Altro metodo interessante da considerare è sicuramente AddComment. Esso permette infatti di aggiungere un commento ad una cella.
L'aggiunta del commento può essere però eseguita solo singolarmente ossia cella per cella e non selezionando un Range di più celle.
La presenza di un commento relativo ad una cella viene visualizzato nel foglio di calcolo tramite una linguetta rossa all'angolo della cella.
Passando il mouse su tale angolo, appare un ToolTip che visualizza il testo del commento. Quello mostrato in figura è un esempio:


Com'è facile intuire, non necessariamente un commento deve essere incluso in una cella al quale sia stato aggiunto un testo o una formula.
Per aggiungere il commento "Questo è il commento alla cella C2" alla cella C2, appunto:

foglioExcel.Cells(2, 3).AddComment "Questo è il commento alla cella C2"

se si desidera lavorare sull'oggetto Cells oppure:

foglioExcel.Range("C2").AddComment "Questo è il commento alla cella C2"

se invece si agisce sul Range unitario di cella C2.
E' anche interessante inserire un testo in una cella andando automaticamente a capo quando si raggiunge il limite di questa, come mostrato dalla figura:


Il risultato si ottiene semplicemente impostando la proprietà WrapText su True in questo modo:

foglioExcel.Range("C2").WrapText = True

Anche in questo caso è possibile attivare la proprietà per un gruppo di celle, indicando ad esempio il Range C2-E4:

foglioExcel.Range("c2", "e4").WrapText = True

Per impostare un valore da assegnare ad una cella abbiamo visto un metodo in precedenza. Esiste però il metodo ufficiale, che questa volta assegna valori veri e propri e non caratteri alfanumerici come nel caso della proprietà Characters, ossia l'assegnazione della proprietà Value ad un oggetto Range.
Così, se si desidera assegnare il valore 123,32 alla cella C2 ed il valore 29 alla cella C4:

foglioExcel.Range("C2").Value = 3.14159
foglioExcel.Range("C4").Value = 29

Attraverso la proprietà Value è possibile quindi impostare le operazioni sulle celle. Se ad esempio si desiderasse assegnare alla cella D3 il valore corrispondente al prodotto dei valori delle celle C2 e C4:

With foglioExcel
.Range("C2").Value = 3.14159
.Range("C4").Value = 29
.Range("D3").Value = .Range("C2").Value * .Range("C4").Value
End With

Oppure è possibile prima popolare una serie di celle come già abbiamo fatto negli esercizi precedenti e poi effettuare una ricerca selezionando tutti i valori superiori ad uno dato.
Proviamo a svolgere questo piccolo esercizio passo per passo. Dopo aver popolato il Range al solito modo (mi ricordandosi della differenza tra Characters e Value):

For i = 1 To 10
For n = 1 To 10
foglioExcel.Cells(i, n).Value = i * 0.2332
Next n
Next i

possiamo quindi copiare nel foglio di calcolo 2 (supposto che prima si stesse lavorando su un foglio di calocolo differente, al fine di evitare confusione inutile), tutti i valori delle celle che superano ad esempio il valore 1.
Quindi, definiamo l'oggetto Cella che servirà poi per effettuare la ricerca:

Set Cella = appExcel.Cells

per ogni Cella nel Range che c'interessa ossia A1 H8:

For Each Cella In foglioExcel.Range("A1", "H8")

se il valore della singola cella è maggiore di 1:

If Cella.Value > 1 Then

cambiamo il foglio di calcolo sul quale lavoriamo scegliendo il foglio 2 ed attiviamolo:

Set foglioExcel = excel.Worksheets.Item(2)
foglioExcel.Activate

consideriamo ora un semplice contatore che ci servirà per incollare le celle con valore maggiore di 1 tutte in una colonna, in modo progressivo:

Cont = Cont + 1

e finalmente copiamo le celle:

foglioExcel.Cells(Cont, 1).Value = Cella.Value

chiusura di cicli e condizioni:

End If
Next Cella

Il risultato dovrebbe essere il seguente:


dove naturalmente quello visualizzato è Foglio2 e le celle incollate vanno ben oltre l'immagine che è stata tagliata per questioni di spazio.
Concludiamo con la proprietà AutoFit che come si intuisce dal nome, modifica le dimensioni delle colonne e/o delle righe per adattare il contenuto delle celle.
AutoFit è una proprietà associabile soltanto agli oggetti Columns e Rows perciò in un Range bisogna indicare se applicare la proprietà alla colonna, alla riga o a tutte e due.
Proviamo ad esempio ad inserire un numero molto lungo in una cella ed uno molto corto in un'altra e a ridimensionare le rispettive colonne:

foglioExcel.Range("d3").Value = 1
foglioExcel.Range("b3").Value = 5499030246
foglioExcel.Range("A1", "d4").Columns.AutoFit

Il risultato sarà il seguente:




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
For i = 1 To 10
For n = 1 To 10
foglioExcel.Cells(i, n).Characters().Text = i & n
Next n
Next i
End Sub

Private Sub Command1_Click()
appExcel.ActiveWindow.RangeSelection.Copy
Set foglioExcel = Excel.Worksheets.Item(2)
foglioExcel.Activate
appExcel.ActiveWindow.RangeSelection.PasteSpecial xlPasteValues
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) utilizzare il seguente codice per attivare sessione, cartella e foglio e popolare parte del foglio di lavoro

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
For i = 1 To 10
For n = 1 To 10
foglioExcel.Cells(i, n).Value = i & n
Next n
Next i
End Sub

2) alla pressione del tasto Command1:

  • visualizzare una finestra di messaggio la somma di tutti i valori delle celle selezionate dall'utente.
    Ricordarsi di utilizzare l'oggetto RangeSelection.

    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