VBA Funzioni
Transcript
VBA Funzioni
VBA Il Vis ual Bas ic for Application ⇐Le funz ioni ⇐Le pr ocedur e Funz ioni µ E’ pos s ibile (e cons igliato) s compor r e un pr oblema in s otto- pr oblemi e combinar e poi as s ieme le s oluz ioni per ottener e la s oluz ione comples s iva. µ Una funz ione è un modo per indicar e la s oluz ione di un s otto- pr oblema una volta che è pos s ibile individuar e un ins ieme di dati in ingr es s o e un r is ultato in us cita 1 Funz ioni µ s i dice che la funz ione r es tituis ce un r is ultato µ il r is ultato r es tituito da una funz ione deve es s er e un unico dato di tipo pr imitivo (o un oggetto) µ ovver o non s i può r es tituir e 2 o più valor i, il valor e r es tituito deve es s er e unico Le funz ioni e le pr ocedur e µ La differ enz a fr a una funz ione e una pr oceedur a o s ubr outine è che al ter mine dell’es ecuz ione una funz ione r es tituis ce un valor e mentr e la s ubr outine no µ tuttavia vedr emo come le s ubr outine pos s onno agir e modificando il valor e di un numer o ar bitr ar io di var iabili 2 Dichiar ar e le funz ioni µ Per dichiar ar e una funz ione s i s cr ive: Function Nome(param1 As tipo, param2 As tipo) _ As tipo_restituito ‘corpo della funzione End Function Dichiar ar e le funz ioni µ Si s cr ive una intes taz ione: ⇐ s i deve pr emetter e la par ola chiave Function ⇐ as s egnar e un nome alla funz ione ⇐ indicare fr a par entes i s epar ati da vir gole i par ametr i di ingres s o s pecificando il nome e il tipo ⇐ in ultimo s i indica il tipo del r is ultato µ s i r acchiude il cor po della funz ione fr a la intes taz ione e la par ola chiave End Function 3 Es empio µ Ques ta funz ione s omma 1 al valor e pas s ato Function SommaUno(valore As Integer) As Integer SommaUno=valore+1 End Function Dichiar ar e le funz ioni µ La r es tituz ione di un valor e avviene as s egnando tale valor e alla var iabile che ha come nome il nome della funz ione 4 Us ar e le funz ioni µ Dopo aver dichiar ato una funz ione ques ta può es s er e utiliz z ata all’inter no di un altr o pr ogr amma o di una altr a funz ione (o s ubr outine) µ Es : Function SommaUnoXY(x As Integer, _ y As Integer) As integer SommaUnoXY=SommaUno(x)+SommaUno(y) End Function Dichiar ar e le s ubr outine µ Una s ubr outine è come una funz ione ma non ha par ametr o di r itor no µ s i dichiar a come Sub Nome(param1 As tipo, param2 As tipo) ‘corpo subroutine End Sub 5 Us ar e le s ubr outine µ Dato che le s ubr outine non r es tituis cono un valor e, non è pos s ibile utiliz z ar le all’inter no di una es pr es s ione µ s i us a una s ubr outine pr emettendo la par ola chiave Call come in: Call Nome(param1,param2) µ oppur e dir ettamente: Nome param1, param2 Es empio Option Explicit Sub programma() Dim nome As String nome=“Antonio” stampa nome End Sub Sub stampa(var As String) ‘….codice per stampare End Sub 6 Par ametr i per valor e o per r ifer imento µ Ci s ono due modi per pas s ar e una var iabile in ingr es s o ad una funz ione o pr ocedur a: per valor e (o copia) oppur e per r ifer imento (o indir iz z o) µ La differ enz a fr a le due modalità s ta nel r ender e dis ponibile alla funz ione/pr ocedur a una copia del valor e della var iabile o il contenuto ver o e pr opr io della var iabile Par ametr i per valor e o per r ifer imento µ Sintatticamente s i indica la modalità per valor e o per r ifer imento pr emettendo ByVal o ByRef r is pettivamente pr ima della dichiar az ione dei par ametr i di ingr es s o Sub nome(ByVal id As Type) Sub nome(ByRef id As Type) 7 Es empio µ Si cons ider i il s eguente pr ogr amma: Sub ProcA() Dim x As Integer x=5 MsgBox x Call AddOneA(x) MsgBox x End Sub Sub AddOneA(ByVal i As Integer) i=i+1 End Sub Spiegaz ione µ In ques to es empio viene as s eganto il valor e 5 alla var iabile x µ poi l a var iabile viene pas s ata ad una funz ione (che vedr emo di s eguito) che ne s tampa il valor e s ul video µ poi viene chiamata la pr ocedur a che pr ende in ingr es s o una copia del valor e di x e lo incr ementa µ ques to per ò non ha effetto s ul contenuto della var iabile x µ infatti quando s ucces s ivamente viene s tampato il valor e di x ques to è s empr e 5 8 Es empio µ Si cons ider i il s eguente pr ogr amma: Sub ProcB() Dim x As Integer x=5 MsgBox x Call AddOneB(x) MsgBox x End Sub Sub AddOneB(ByRef i As Integer) i=i+1 End Sub Spiegaz ione µ Ques ta volta la var iabile è s tata pas s ata per r ifer imento µ Ques to s ignifica che la pr ocedur a va a modificar e il contenuto della var iabile x µ Infatti alla fine dell’elabor az ione il valor e di x è s tato incr ementato e vale 6 9 Nota Attenz ione!!! µ Di default il VBA cons ider a le var iabili pas s ate per r ifer imento e quindi ciò che s i modifica in una pr ocedur a ha effetto s ulla var iabile che viene pas s ata Pr egi/difetti delle due modalità µ Ognuna delle due modalità r is ulta vantaggios a s e applicata con una finalità oppor tuna µ Il pas s aggio per valor e per mette di es s er e s icur i che la pr ocedur a non modificher à le var iabili contenute nel pr ogr amma che s ta us ando tali pr ocedur e µ Il pas s aggio per r ifer imento è più veloce per ché non deve es eguir e una copia µ Inoltr e il pas s aggio per r ifer imento per mette di agir e s u un numer o ar bitr ar io di var iabili 10 Funz ioni vs . Pr ocedur e µ Mentr e una funz ione può r es tituir e un unico valor e al ter mine della s ua es ecuz ione, una pr oceedur a può pr ender e in ingr es s o per r ifer imento più var iabili e modificar ne tutti i valor i µ tuttavia l’us o delle funz ioni per mette di utiliz z ar e il nome della funz ione s tes s a all’inter no di es pr es s ioni più comples s e Es empio Sub Main() Dim x As Integer, y As Integer, z As Integer x=10 y=20 z=quadrato(x)+doppio(y) End Sub Function quadrato(i As Integer) quadrato=i*i End Function Function doppio(i As Integer) doppio=i*2 End Function 11 Es empio Sub Main() Dim x As Integer, y As Integer, z As Integer x=10 y=20 Call calcolo(x,y,z) ‘oppure calcolo x,y,z End Sub Sub calcolo(ByRef i As Integer, ByRef j As _ Integer, ByRef k As Integer) k=i*i+j*2 End Sub Es empio Sub Main() Dim x As Integer, y As Integer, z As Integer x=10 Call calcolo(x,y,z) ‘oppure calcolo x,y,z End Sub Sub calcolo(ByRef i As Integer, ByRef j As _ Integer, ByRef k As Integer) k=i*i j=i*2 End Sub 12 Funz ioni pr edefinite in Wor d µ Sono a dis pos iz ione un elevato numer o di funz ioni pr edefinite µ una funz ione è pr edefinita quando non è neces s ar io s cr iver ne il pr ogr amma per l’utente µ Noi tr atter emo s olo alcune utili funz ioni: ⇐ funz ioni ⇐ funz ioni ⇐ funz ioni ⇐ funz ioni per la rappr es entaz ione di s tr inghe per l’ins er imento/acquis iz ione di infor maz ioni per la manipolaz ione di s tr inghe di conver s ione Funz ioni per la r appr es entaz ione Ms gBox µ La funz ione Ms gBox s er ve per cr ear e una fines tr a s ulla quale s cr iver e una s tr inga µ la s intas s i è: MsgBox stringa µ Es empio: Dim frase As String frase=“questa e’ una prova” MsgBox frase 13 Nota µ Per s cr iver e un mes s aggio s u più linee è s ufficiente ins er ir e oppor tuni vbCr Lf µ per s cr iver e il valor e di una var iabile è s ufficiente pas s ar e tale valor e alla funz ione (il numer o viene automaticamente conver tito in s tr inga) µ Es : Dim myInt As Integer myInt=34 MsgBox myInt Funz ioni per l’acquis iz ione InputBox µ Per acquis ir e una s tr inga s i us a la funz ione InputBox con la s eguente s intas s i: Dim leggo As String leggo=InputBox(“messaggio per l’utente”) 14 Funz ioni per s tr inghe µ Ecco una lis ta di utili funz ioni per manipol ar e le s tr inghe: µ Len, Left, Right, Mid, Str , Val, T r im Funz ioni per s tr inghe µ Len: r es tituis ce la lunghez z a (cioè il numer o di car atter i) di una s tr inga, compr es i s paz i, s egni di inter punz ione etc. µ Es : ⇐ Len(“Oggi piove”) r es tituis ce 10 15 Funz ioni per s tr inghe µ Left, Right, Mid: r es tituis cono la por z ione di una s tr inga r is pettivamente più a s inis tr a, des tr a, nel centr o µ Left(par ola, num): r es tituis ce un numer o par i a num car atter i a par tir e da s inis tr a della s tr inga par ola µ Es : ⇐ Left(“Oggi piove”, 6) r es tituis ce “Oggi p” µ Analogamente per la funz ione Right Funz ioni per s tr inghe µ La funz ione Mid pr ende in ingr es s o una s tr inga e due numer i µ Mid(par ola, iniz io, lunghez z a) µ Es : ⇐ Mid(“Oggi piove”, 3,4) r es tituis ce “gi p” 16 Funz ioni per s tr inghe µ La funz ione Str conver te un numer o in s tr inga µ Es : ⇐ Str (123) r es tituis ce la s tr inga “123” µ La funz ione Val conver te una s tr inga in un numer o µ Es : ⇐ Val(“34.5”) r es tituis ce il numer o 34.5 µ ma anche: ⇐ Val(“50123 Fir enz e”) r es tituis ce il num 50123 Funz ioni per s tr inga µ La funz ione T r im s er ve per eliminar e s paz i all’iniz io e al ter mine di una par ola µ Es : ⇐ T rim(“ cas a ”) r es tituis ce la s tr inga “cas a” 17