Ingegneria Edile, Strutturale & Geotecnica > .:C#, Excel, VB e Programmazione:.

VBA- Lezione 1 - Come iniziare a scrivere una funzione

(1/4) > >>

afazio:
Accolgo l'invito di zax ed inizio a scrivere qualcosa per coloro che non hanno idea di come fare per scrivere piccoli programmini utilizzando l'ambiente excel e che tuttavia aiutati a superare il primo gradino potrebbero essere in grado di percorrere l'intera scala.
In questo primo esercizio mi propongo di illustrare l'ambiente di programmazione VBA, cioè come accedervi, creare moduli di programmazione e inserire del codice e prenderò come esempio quello di scrivere una semplice funzione personalizzata che ricevendo come input un tensore dello stato piano di tensione mi restituisca le tensioni principali e la giacitura del piano principale.

afazio:
Sia dato il tensore di uno stato piano di tensione attraverso i suoi tre termini sigma.x, sigma.y e tau.xy

ricordiamo che le espressioni per determinare le tensioni principali, la giacitura del piano su cui giace sigma.1 e la tensione tangenziale massima sono quelle riassunte nell'immagine che segue.



Uploaded with ImageShack.us

L'immagine è tratta da un documento trovato in rete.

Abbiamo tutto, adesso occorre tradurlo in codice.


Intanto vediamo che occorrerà dare in input almeno tre dati e cioè
sigma.x
sigma.y
tau.xy

Quindi la struttura della  funzione dovrebbe essere qualcosa di simile:

tensioni_principali(sigmax, sigmay, tauxy)

Ma occorre che la sintassi sia rispettosa delle regole imposte dal linguaggio interprete. Ogni funzione deve essere preceduta dalla parola chiave Function ed oad gni parametro definito nella struttura deve essere attribuito un tipo. Per i tipi di variabili vedere per esteso l'help on line di VBA, per quello che ci riguarda sappiamo che le tensioni possono essere qualsiasi numero reale positivo o negativo. Infine se vogliamo che la funzione personalizzata poi appaia nell'elenco delle funzioni presenti in excel dobbiamo inserire la clausola Public.
Il tipo di dato che rappresenterà l'input sarà quindi un Double.
altri tipi di dati sono Byte, Boolean, Integer, Long, Currency, Single, Double, Variant, Object ed infine un tipo definito dall'utente. Ognuno di questi tipi occupa un ben determinato spazio di memoria (in byte), per esempio il tipo Byte occupa un solo byte cioe 8 bit ed è utile per memorizzarvi un numero positivo compreso tra 0 e 255, mentre il tipo double occupa 8 byte (64 bit) ed è ottimo per memorizzarvi un qualsiasi numero compreso tra 1.79769313486231E308 e -4,94065645841247E-324 per i valori negativi, tra 4,94065645841247E-324 e 1,797693134862325E308 per i valori positivi.
LA conoscenza di queste informazioni risulta importante quando si compongono programmi le cui variabili impegano quantitativi enormi di memoria. In questi casi occorrerà avere molta cura a non sprecare spazio e quindi definire il giusto tipo al giusto dato per evitare per esempio, di impegnare 64 bit per un dato che ne occupa solo 1. Gli altri 63 resteranno vuoti ed inutilizzabili.

....

afazio:
Una funzione personalizzata restituisce un solo valore (oppure per avere piu valori si deve far ricorso alle matrici, ma questo per adesso laciamolo perdere), quindi accetta come input tutta una serei di valori numerici e/o non ed alla fine ci da un solo valore.
Quindi occorre definire anche il tipo del valore restituito.

DA quanto detto allora la definizione della funzione deve essere una cosa del genere:

public Function Tensioni_Principali(sigmax as double, sigmay as double, tauxy as double) as double

in cui proprio la frase finale "as double" definisce il tipo restituito dalla funzione

.....

afazio:
Ma resta ancora una cosa da definire, legata al fatto che la funzione ci restituisce sempre un solo valore mentre noi vogliamo che possa restituirci, a nostro piacimento, o la sigma1 o la sigma2 o la giacitura o infine la taumax.
Io ho risolto questa cosa inserendo in input un ulteriore parametro che sta ad indicare cosa voglio che la funzione mi restituisca. La prima volta chiamai questo parametro col nome "flag" (bandiera) e da allora non l'ho piu cambiato. IL parametro flag è pertanto un intero che asumerà il seguente ruolo:
se a flag do 1 la funzione mi deve restituire sigma1
se a flag do 2 la funzione mi deve restituire sigma2
se a flag do 3 la funzione mi deve restituire taumax
se a flag do 4 la funzione mi deve restituire alfa

Detto questo abbiamo la definizione della funzione come segue:
public Function Tensioni_Principali(sigmax as double, sigmay as double, tauxy as double, flag ad integer) as Variant

Noterete che ho cambiato il tipo del dato restituito dalla funzione da Double a Variant. Prossimamente vi spiego il motivo.

alla prossima


afazio:
Adesso che abbiamo quasi tutto chiaro, accediamo in ambiente programmazione VBA

Per accedervi abbiamo due vie, la prima è raffigurata nella immagine che segue:



Uploaded with ImageShack.us

mentre la seconda consiste nel far visualizzare anche la barra degli strumenti di VBA ed accedere all'ambiente di VBA mediante pressioen del tasto "Visual Basic Editor" come raffigurato nelle due immagini che seguono.



Uploaded with ImageShack.us



Uploaded with ImageShack.us


LA seconda via è da preferire poiche la barra degli strumenti ci mette a portata di mano altre funzioni come quella che ci mette a disposizione gli strumenti di controllo (questi non sono altro che vari controlli come i box di spunta, le caselle combinate, gli spin, pulsanti, caselle di testo ed altro da poter distribuire sul foglio a piacimento ed attibuire a ciascuno di essi una procedura qualsiasi a nostra scelta), ci consente di passare dalla modalita di progettazione alla modalita utente (utile nel caso in cui stiamo utilizzando gli strumenti di controllo e vogliamo progettare le azioni che excel dovra eseguire alla loro pressione).

Navigation

[0] Message Index

[#] Next page

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
Go to full version