register.png   lostpass.png
Benvenuto nella Community di Alexsandra.it
05 Febbraio 2012 03:59:08
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
· Gianca05:00:45
· Alex08:01:07
· SALVO18:21:58
· 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 #11 : Procedure e metodi in VBA
Pubblicato da :Alex | 5449 letture | Stampa
Continuiamo nell'esposizione dei vari controlli e riprendiamo il file di esempio che stiamo facendo assieme aggiungendo altre funzioni. Riprendiamo dalla schermata principale

lezione11_1.jpg Fig.1"

Ora è stato inserito un pulsante "Nuovo Documento" tramite la macro associata possiamo creare un nuovo documento(lo dice la parola), numerarlo in maniera univoca e richiamare altre funzioni legate al programma che stiamo facendo. Per non rendere dispersive queste informazioni e al tempo stesso che siano di facile consultazione le ho raggruppate in un foglio di lavoro che ho chiamato 'Setup' ed è strutturato in questo modo

lezione11_2.jpg Fig.2

In questo foglio vengono memorizzati dei dati che serviranno come indice per i nuovi documenti che andremmo a creare e anche per altre operazioni che verranno esposte in seguito per completare il nostro programma

In questo foglio la colonna A viene usata come descrizione e nella colonna B vengono inseriti i valori, vediamo cosa sono i valori memorizzati

Nella riga B1 è stato inserito il numero dell'ultimo preventivo memorizzato, in B2 è stato inserito un flag (indice) in B3 memorizziamo il n° di riga e in B4 il n° di colonna, vedremmo più avanti a cosa ci servono questi ultimi dati.
Iniziamo ora l'esposizione del pulsante 'Nuovo Documento'.

Dobbiamo tenere presente che premere su questo pulsante è la prima operazione da fare, una volta premuto viene eseguita una macro che ha il compito di riempire determinati campi e fare qualche operazione, vediamo come si presenta il foglio dopo l'esecuzione della macro.

lezione11_3.jpg Fig.3

Come vedete è stato compilato il campo 'Data', il N° di documento, la forma di pagamento e ho posizionato il cursore sulla cella A20, cioè la prima riga che deve contenere i vari prodotti da preventivare, questo è il codice della macro che ci ha permesso di fare questo

Sub nuovo()
If Left(ActiveSheet.Name, 10) = "Preventivi" Then
svuota_prev ' macro per svuotare tutti I campi
[N14] = Date
[P14] = Sheets("Setup").[B1].Value + 1' incremento n° preventivo
Sheets("Setup").[B2] = False' Flag
Calcola ' altra macro
[B20].Select
Else
Exit Sub
End If
End Sub

Commentiamo il codice

If Left(ActiveSheet.Name, 10) = "Preventivi" Then

Tutta la procedura l'ho inserita in un ciclo IF, questo consente l'esecuzione della macro solo se abbiamo il foglio 'Preventivi' attivo, possiamo dire che questa riga di codice garantisce che la macro non possa essere eseguita in altri fogli, evitando così possibili errori.

Il compito della riga di codice sopra esposta è quella di leggere, partendo da sinistra, il nome del foglio [ActiveSheet.Name] per 10 caratteri e se è uguale a [Preventivi] esegue anche il resto del codice altrimenti non venendo soddisfatta la condizione vengono saltate tutte le istruzioni e si esce dalla Sub.
Se per esempio il nome del foglio dovesse essere 'Pippo' la nostra riga di codice diventerebbe

If Left(ActiveSheet.Name, 5) = "Pippo" Then

Per personalizzare questo procedimento dobbiamo contare i caratteri del nome del foglio e dopo l'istruzione [ActiveSheet.Name] e mettere la cifra dei caratteri contati.
Di seguito troviamo la macro [svuota_prev] che si occupa di svuotare tutti i campi del foglio, una ulteriore sicurezza di partire col foglio pulito, il codice è il seguente

Sub svuota_prev()
Range("B11:M11,B14:Q14,B20:Q46,P49:Q55,B57:Q57″).ClearContents
Sheets("Setup").Range("B2:B4″).ClearContents
End Sub


L'istruzione Range la potete personalizzare come volete, dipende da come strutturate il vostro foglio, in pratica dovete inserire gli intervalli che conterranno i vostri dati, inoltre viene cancellata anche parte dei dati del foglio Setup, dove memorizzo determinati valori che variano di volta in volta, ma su questo aspetto chiariremo più avanti come agire.

La riga successiva inserisce la data nel foglio

[N14] = Date

Assicuratevi che la cella sia formattata nel modo giusto per ricevere il formato data che più preferite, pertanto fate clic col destro sulla cella e nel menù che compare scegliete 'Formato celle', vi apparirà una maschera come la seguente

lezione11_4.jpg Fig.4

Passiamo ora alle righe successive che sono quelle più importanti.

[P14] = Sheets("Setup").[B1].Value + 1

Se guardiamo nella Fig. 1 il numero del preventivo è situato nella cella P14, nel codice la vedete scritta in valore assoluto [P14], che equivale a scrivere : Range("P14″), viene però richiamato il foglio 'Setup', come abbiamo detto poco sopra, il foglio 'Setup' serve a memorizzare le impostazioni del programma.

In questo caso se guardate la Fig.2 l'ultimo preventivo memorizzato ha il n° 17, con il codice usato vado a leggere il numero dell'ultimo preventivo memorizzato che si trova nella cella B1, lo incremento di 1, e scrivo il nuovo valore nella cella P14.

Sheets("Setup").[B2] = False

La riga di codice qui sopra rappresenta un Flag (bandierina), serve come indicatore, in questo caso lo utilizzo per sapere che stiamo facendo un Nuovo preventivo, lo memorizzo nella cella B2 col valore di FALSE.

Questa operazione ci servirà per sapere se stiamo operando su un nuovo preventivo o se stiamo modificando un preventivo già memorizzato, in quest'ultimo caso il flag sarà TRUE, vedremmo meglio questo passaggio più avanti, per il momento possiamo dire sommariamente che se il preventivo è nuovo quando lo voglio salvare non mi chiede niente, mentre invece se carico un preventivo da modificare il programma mi avverte che il preventivo era già in memoria, e avverte l'operatore della modifica che si sta apportando chiedendo l'autorizzazione a farla.

Altra riga di codice molto importante è la chiamata alla macro calcola.

Sub calcola()
Dim mydate, mystr
mydate = [N14]
mymonth = Month(mydate)
posiz = mymonth * 8 - 7 'calcolo n°colonna
Sheets("Setup").[B4] = posiz ' scrivo la colonna
m = 2
Do Until Sheets("Archivio").Cells(m, posiz).Value = Empty
m = m + 22
Loop
Sheets("Setup").[B3] = m ' scrivo n° di riga
[B14] = "Contanti o titoli alla consegna" ' pagamento
End Sub


Ora con questa routine il discorso si fa interessante, innanzi tutto viene richiamato un foglio Archivio, il suo compito sarà quello di contenere i preventivi che verranno salvati, suddivisi per periodo (mese), vediamo come è strutturato questo foglio

lezione11_5.jpgFig.5

Ho ristretto un po' le colonne e le righe per farvi vedere come si presenta il foglio. La routine calcola trova la colonna e la riga in cui scrivere, vediamo ora il codice

mymonth = Month(mydate)

questa funzione ci riporta il mese in formato numerico per cui Gennaio =1, Febbraio =2 etc.

posiz = mymonth * 8 - 7

Nella variabile posiz memorizziamo la colonna in base ad un calcolo matematico che possiamo anche esprimere in altro modo. Supponiamo di essere a Marzo di conseguenza diventa

posiz = 3 * 8 - 7 di cui = [24-7] =17

Se andiamo a vedere la 1° colonna del mese di Marzo corrisponde a Q, in forma numerica è la 17° colonna, quella sarà la colonna in cui andremo a scrivere, e per sicurezza la memorizzo nel foglio Setup

Sheets("Setup").[B4] = posiz


Le righe evidenziate in giallo sono quelle che ricevono i dati principali come Nome cliente, indirizzo, pagamento, n° preventivo, totale preventivo etc.. mentre le altre conterranno i dati del preventivo, codice articolo, descrizione, etc.

Ora dobbiamo trovare in quale riga scrivere

m = 2
Do Until Sheets("Archivio").Cells(m, posiz).Value = Empty
m = m + 22
Loop


La variabile m è uguale a 2 perché partiamo dalla 2° riga (nella 1° ci sono le intestazioni dei mesi) e poi facciamo un loop dalla riga m e colonna posiz finche non troviamo una riga vuota con un 'salto' però di 22 righe, in pratica ad ogni Loop incrementiamo il valore di m di 22 [m = m + 22], se contate le righe tra quelle colorate in giallo vedrete che sono 22.

Sheets("Setup").[B3] = m

e anche con questo dato lo memorizzo nel foglio Setup. Possiamo riassumere che i valori della variabile m e della variabile posiz corrispondo alla riga e colonna dove dovremmo andare a scrivere i nostri dati.

Una dichiarazione molto importante a riguardo è l'uso delle variabili, che devono essere dichiarate ad inizio del listato, nel nostro caso (visto che nel proseguo del programma vengono usate in altre routine) le ho dichiarate Public in questo modo

Public m As Integer, posiz As Integer

A questo punto vediamo anche i 2 campi 'Agente' e 'Trasporto', per facilitare l'inserimento di valori ripetitivi ed evitare di continuare a scriverli usiamo la Formattazione Condizionale per inserire nelle rispettive celle i dati che andremo di volta in volta a scegliere.

Vediamo come si presentano

Fig.6 Fig.7

Per ottenere questo si deve agire in questo modo, selezionate la cella in cui far apparire il menù a tendina e dal menù Dati > Convalida

Fig.8

Ci comparirà un box come quello sotto riportato

Fig.9

Clicchiamo sul box 'Consenti' e selezioniamo la voce 'Elenco' dal menù a tendina che compare. Fatto questo nel box sotto 'Origine'

Fig.10

Cliccando sull'icona segnalata dalla freccia rossa possiamo selezionare un intervallo di celle, che i valori presenti in questo intervallo andranno a costituire il nostro elenco. Però questa operazione possiamo eseguirla sullo stesso foglio, mentre i nostri dati sono nel foglio Setup.
Abbiamo appena parlato di intervalli (sullo stesso foglio), ma possiamo creare un intervallo di celle e dargli un nome per poter riempire il nostro elenco.

Operiamo allora in questo modo, dal menu Inserisci > Nome > Definisci

Fig.11

Una volta cliccato su Definisci ci compare un box come il seguente

Fig.12

Si può notare subito che appare già il nome del foglio (Preventivi), ma a noi interessa il foglio Setup, a questo punto possiamo cliccare sulla linguetta dove compaiono i nomi dei fogli

Fig. 13

E ci spostiamo nel foglio Setup, a questo punto selezioniamo l'intervallo di celle che ci interessa

Fig.14

Cliccando ancora sull'icona a destra ci compare il box compilato

Fig.15

A questo punto dobbiamo solo scrivere il nome dell'intervallo nel box indicato dalla freccia rossa, poi premiamo su Aggiungi e poi su Ok. Ora ritorniamo nel box della Convalida (vedi Fig.10) e digitiamo il nome dell'intervallo che abbiamo definito poco sopra preceduto da =

Fig.16

Stessa operazione dobbiamo eseguire anche per il campo 'Trasporto' ed avremmo il nostro elenco a discesa prelevando i dati dal foglio Setup.
Per il momento fermiamoci qui, nella prossima lezione vedremmo il listino prezzi e le procedure per salvare e richiamare un documento




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