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