|
|
Corso VBA #13 : Gestione Preventivi - Parte 2 |
Ora ci rimane da vedere il processo di lettura dei dati nel
foglio “Listino” e la scrittura degli stessi nel foglio “Preventivi”. Guardiamo
la Userform che ci interfaccia

Una volta selezionata la categoria e l’articolo che ci
interessa dobbiamo inserire la quantità nel relativo box e cliccare sul pulsante
con l’icona a matita e inseriremo i dati nel foglio “Preventivi”

Prima di vedere il codice utilizzato, dobbiamo fare una
considerazione, come potete vedere nella Userform c’è solo il campo “Quantità”,
e nel codice che finora abbiamo utilizzato e commentato non apparivano
variabili o celle in cui andavamo a memorizzare gli altri dati, come il codice
articolo, il prezzo etc..
In questi casi risulta comodo e pratico usare delle
“scorciatoie” per memorizzare i dati che andiamo a scrivere, vediamo la Userform “allargata” cosa
contiene

Allargando le dimensioni della Userform nell’editor di VBA sono comparsi 2
campi che prima erano nascosti e contengono il codice articolo e il prezzo. La
loro compilazione avviene nella routine ListBox2_Click con questo codice
Private Sub ListBox2_Click()
p = ListBox2.ListIndex + 3
cancella
TextBox1.Text =Sheets("Listino").Cells(p, posiz)
TextBox2.Value =Format(CDbl(Sheets("Listino").Cells(p, posiz + 7)),
"##.00")
TextBox3.SetFocus
End Sub
Nella lezione precedente abbiamo visto la funzione ListCount
che rappresenta il contatore di oggetti presenti nel ListBox, ora usiamo
ListIndex, ricordiamo che la proprietà List(indice) rappresenta il
contenuto della riga il cui indice è la proprietà Listindex, cioè quella
selezionata. Per cui ritornando al nostro codice
p = ListBox2.ListIndex + 3
Dobbiamo tener presente che ogni voce del nostro elenco
siano esse in una ListBox o in una ComboBox hanno tutte il valore iniziale “0” [zero], per cui se vogliamo
sapere la riga del foglio a cui corrisponde la voce selezionata dobbiamo fare
il calcolo matematico ListBox2.ListIndex+3, dove 3 è il numero di riga da cui
abbiamo iniziato ad inserire i nostri articoli.
Per cui la prima voce avrà come valore List 0, la seconda
valore 1, la terza valore 2 e così di seguito, per cui sommando il valore 3 al
valore List avremmo il numero di riga corrispondente all’articolo selezionato.
La riga successiva richiama una routine cancella, vediamo il suo codice
Private Sub cancella()
TextBox1.Text = "": TextBox2.Text ="": TextBox3.Text = ""
End Sub
Molto semplice ed intuitiva, con quella routine cancelliamo
i valori presenti nei vari box per evitare errori di calcolo, poi di seguito
riempiamo i vari TextBox con i relativi valori memorizzati nel foglio “Listino”
relativi all’articolo selezionato
TextBox1.Text = Sheets ("Listino").Cells(p,posiz)
Con questo codice diamo al TextBox1 il valore presente nel
foglio “Listino” alle coordinate della riga p e colonna posiz. Abbiamo visto nella lezione precedente che la variabile posiz indica il numero della colonna corrispondente alla categoria
selezionata nel ListBox1, mentre invece la variabile p indica il numero di riga
dell’articolo selezionato nel ListBox2
TextBox2.Value =Format(CDbl(Sheets("Listino").Cells(p, posiz + 7)),
"##.00")
Per il TextBox2 facciamo la stessa identical cosa, solo che
è rappresentato con una funzione aggiuntiva, la proprietà Format, che vedremo
meglio nel proseguo delle varie lezioni, per il momento considerate che questa
funzione ha il compito di “formattare” i valori numerici pertanto il valore
1000 diventa 1.000,00
TextBox3.SetFocus
Questo enunciato serve per riportare il focus (cioè portare
il cursore) sul TextBox3 che corrisponde al campo “Quantità”, in modo che
quando clicchiamo sul ListBox2 abbiamo già il cursore posizionato sul TextBox
della “Quantità” pronto a ricevere i dati che andremmo ad inserire.
Vediamo ora l’inserimento dei dati che abbiamo raccolto
sull’articolo selezionato, disponibili sia nel ListBox che nei TextBox, li
inseriamo nel foglio usando questo codice :
Private Sub CommandButton2_Click()
If FormArt.TextBox3 = "" Then: _
MsgBox "Inserire quantità", vbExclamation: Exit Sub
i = 17
Do Until Sheets("Preventivi").Cells(i, 2) = Empty
i =i + 1
Loop
With Sheets("Preventivi")
.Cells(i, 2).Value = TextBox1.Text 'codice
.Cells(i, 3).Value = ListBox2.Text 'descrizione
.Cells(i, 14).Value = TextBox3.Text 'quantità
.Cells(i, 15).Value = TextBox2.Text 'prezzo
.Cells(i, 17).Formula = "=RC[-2]*RC[-3]" 'importo
End With
[P51].Formula = "=sum(Q17:Q49)" 'totale imponibile
[P53].Formula = "=(P51*20)/100" 'Importo iva
[P55].Formula = "=sum(P51+P53)" 'totale ordine
End Sub
La prima riga non è altro che una condizione da verificare
per evitare errori, praticamente controlla che il campo “Quantità” contenga un
valore, in caso contrario manda un avviso ed esce dalla sub. In questo caso
però ci tocca rifare tutto per aver dimenticato di inserire la quantità
richiesta per l’articolo selezionato, possiamo ovviare a questo modificando il
codice in questo modo :
If FormArt.TextBox3 = "" Then: _
MsgBox "Inserire quantità",vbExclamation: TextBox3.SetFocus
In questo modo veniamo avvisati dal programma che ci siamo
dimenticati di inserire la quantità, e il focus rimane nel TextBox della
quantità.
i = 17
Poniamo la variabile i uguale a 17 che se guardate la 2°
immagine vedete che corrisponde alla 1° riga del foglio “Preventivi” che
riceverà il primo articolo.
A questo punto però non sappiamo in quale riga
andare a scrivere i nostri dati e per evitare eventuali sovrascritture andiamo
a verificare quale sia la prima riga libera che possa ricevere i nostri dati
partendo dalla riga 17 con il codice :
Do Until Sheets("Preventivi").Cells(i, 2) = Empty
i = i + 1
Loop
Abbiamo già visto i cicli, comunque molto brevemente con il
ciclo Do Loop scorriamo il foglio partendo dalla riga 17 colonna 2, finche non
troviamo una riga vuota, che indicherà la condizione soddisfatta e ci permette
di uscire dal ciclo. Verificata la condizione la nostra variabile i assumerà
tale valore che useremo nel resto del listato per inserire i nostri dati.
Con questa operazione abbiamo dato un valore alla variabile
i e ora sappiamo in che riga iniziare a scrivere i nostri dati, cosa che faremo
con il seguente codice :
With Sheets("Preventivi")
.Cells(i,2).Value = TextBox1.Text 'codice
.Cells(i, 3).Value = ListBox2.Text 'descrizione
.Cells(i, 14).Value = TextBox3.Text 'quantità
.Cells(i, 15).Value = TextBox2.Text 'prezzo
.Cells(i,17).Formula = "=RC[-2]*RC[-3]"'importo
End With
Useremo un ciclo With per scrivere i dati nel foglio
“Preventivi”, credo che il listato sia abbastanza intuitivo, in pratica dando
un valore ai vari Box presenti nella Userform ora possiamo utilizzare questo
valore per trasportarlo nel foglio con un semplice rapporto di uguaglianza tra
le coordinate Cells e i valori dei vari box. Da notare la trascrizione della
formula nella colonna “Importo” che dal VBA esporteremo in excel, moltiplicando
il valore presente nelle celle di 3 colonne precedenti con quello di 2 colonne
precedenti.
Concludiamo il nostro inserimento trascrivendo le formule per la somma di tutti i dati con il codice
[P51].Formula = "=sum(Q17:Q49)" 'totale imponibile
[P53].Formula = "=(P51*20)/100" 'Importo iva
[P55].Formula = "=sum(P51+P53)" 'totale ordine
Vedremo nella prossima lezione come memorizzare il nostro
preventivo in modo da poterlo interrogare ogni volta che ne abbiamo la
necessità
|
|
|
Devi essere loggato per poter inserire un messaggio.
|
 |
Nick: Gho5t Iscritto: 05.05.08
< 5 min |
|
 |
Nick: Unsigned Iscritto: 15.08.08
01:20:12 |
|
 |
Nick: Faby Iscritto: 28.05.08
01:40:43 |
|
 |
Nick: Neutrino Iscritto: 21.11.08
02:02:54 |
|
 |
Nick: Max90 Iscritto: 12.08.08
05:16:01 |
|
Totale iscritti: 299
Il nuovo iscritto: Bruno56
|
|