register.png   lostpass.png
Benvenuto nella Community di Alexsandra.it
05 Febbraio 2012 03:02:50
Shoutbox
Devi essere loggato per poter inserire un messaggio.

Faby
28/01/2012 13:48
Buon week end anche ate Delfi Smile

DELFINO
28/01/2012 11:03
buon sabato e buon weekend a tutti... E un bacio alle ragazze Bacio

Faby
27/01/2012 18:21
Ciao Angarat

angarat
27/01/2012 14:38
ciao belli e brutti Bacio ao! ciaooooo! Biggrin

Faby
26/01/2012 13:52
Ciao Delfi, sono di corsa.. a presto

Utenti Connessi
· Gianca04:04:27
· Alex07:04:49
· SALVO17:25:40
· Mirko 1 giorno
· carlo1973 1 giorno
· Spawn 2 giorni

· Totale iscritti: 553
· Nuovo iscritto: SALVO
RSS Feeds
Subscribe to our Feeds

Latest News Latest Articles
Le nostre rubriche

Quotidiani online

Siti Web Visti per Voi

Fotogallery
Siti Amici

Siti Amici

Noi diciamo no

No alla Pedofilia

Page Rank

Powered by  MyPagerank.Net

Pagerank
Award
Corso VBA #13 : Gestione Preventivi - Parte 2
Pubblicato da :Alex | 3300 letture | Stampa
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à
Condividi Articolo
AddThis:
URL:
BBcode:
HTML:
Facebook Like:


php fusion  copyright © 2002 - 2011 by Nick Jones   Released as free software without warranties under GNU Affero

Theme designed by Benjamin Eriksen | PhpFusionBox.com | Edited and rewritten by Alex