





mar 27 2008
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
Fig.2In 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.
Fig.3Come 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
Fig.4Passiamo 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
Fig.5Ho 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.7Per 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.8Ci comparirà un box come quello sotto riportato
Fig.9Clicchiamo sul box 'Consenti' e selezioniamo la voce 'Elenco' dal menù a tendina che compare. Fatto questo nel box sotto 'Origine'
Fig.10Cliccando 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: |
|







Home
Articoli
Downloads
Informazioni
Utility















