VBA - disit. VBA Il Visual Basic for App lication Le funzioni Le procedure Funzioni m E’ possibile (e consigliato) scomporre un problema in sotto-problemi e combinare poi

  • Published on
    21-Mar-2018

  • View
    213

  • Download
    0

Transcript

  • 1

    VBA

    I l Visual Bas ic for ApplicationLe funz ioniLe procedure

    Funz ioni

    E poss ibi le (e cons igl iato) scomporre unproblema in sotto- problemi e combinare poiass ieme le soluz ioni per ottenere la soluz ionecompless iva.

    Una funz ione un modo per indicare lasoluz ione di un sotto- problema una volta che poss ibi le individuare un ins ieme di dati iningresso e un r isultato in uscita

  • 2

    Funz ioni

    s i dice che la funz ione res tituisce un r isultato i l r isultato res ti tuito da una funz ione deve

    essere un unico dato di tipo pr imitivo (o unoggetto)

    ovvero non s i pu res ti tuire 2 o pi valor i , i lvalore res ti tuito deve es sere unico

    Le funz ioni e le procedure

    La differenz a fra una funz ione e una proceedurao subroutine che al termine dellesecuz ioneuna funz ione res tituisce un valore mentre lasubroutine no

    tuttavia vedremo come le subroutine possonnoagire modificando i l valore di un numeroarbitrar io di var iabi l i

  • 3

    Dichiarare le funz ioni

    Per dichiarare una funz ione s i scr ive:Function Nome(param1 As tipo, param2 As tipo) _

    As tipo_restituito

    corpo della funzione

    End Function

    Dichiarare le funz ioni

    Si scr ive una intes taz ione: s i deve premettere la parola chiave Function assegnare un nome al la funz ione indicare fra parentes i separati da virgole i parametr i di

    ingres so specificando i l nome e i l tipo in ultimo s i indica i l tipo del r isultato

    s i racchiude i l corpo della funz ione fra laintes taz ione e la parola chiave End Function

  • 4

    Esempio

    Questa funz ione somma 1 al valore passatoFunction SommaUno(valore As Integer) As Integer

    SommaUno=valore+1

    End Function

    Dichiarare le funz ioni

    La res ti tuz ione di un valore avviene assegnandotale valore al la var iabi le che ha come nome i lnome della funz ione

  • 5

    Usare le funz ioni

    Dopo aver dichiarato una funz ione questa puessere uti l iz z ata al linterno di un altroprogramma o di una altra funz ione (osubroutine)

    Es :Function SommaUnoXY(x As Integer, _

    y As Integer) As integer

    SommaUnoXY=SommaUno(x)+SommaUno(y)

    End Function

    Dichiarare le subroutine

    Una subroutine come una funz ione ma non haparametro di r i torno

    s i dichiara comeSub Nome(param1 As tipo, param2 As tipo)

    corpo subroutine

    End Sub

  • 6

    Usare le subroutine

    Dato che le subroutine non res ti tuiscono unvalore, non poss ibi le uti l iz z ar le al linterno diuna espress ione

    s i usa una subroutine premettendo la parolachiave Call come in:Call Nome(param1,param2)

    oppure direttamente:Nome param1, param2

    Esempio

    Option Explicit

    Sub programma()

    Dim nome As String

    nome=Antonio

    stampa nome

    End Sub

    Sub stampa(var As String)

    .codice per stampare

    End Sub

  • 7

    Parametr i per valore o per r i fer imento

    Ci sono due modi per passare una var iabi le iningresso ad una funz ione o procedura: pervalore (o copia) oppure per r i fer imento (oindir iz z o)

    La differenz a fra le due modali t s ta nel renderedisponibi le al la funz ione/procedura una copiadel valore del la var iabi le o i l contenuto vero epropr io del la var iabi le

    Parametr i per valore o per r i fer imento

    Sintatticamente s i indica la modalit per valore oper r i fer imento premettendo ByVal o ByRefr ispettivamente pr ima della dichiaraz ione deiparametr i di ingresso

    Sub nome(ByVal id As Type)

    Sub nome(ByRef id As Type)

  • 8

    Esempio

    Si cons ider i i l seguente programma: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 questo esempio viene asseganto i l valore 5al la var iabi le x

    poi la var iabi le viene passata ad una funz ione(che vedremo di seguito) che ne s tampa i l valoresul video

    poi viene chiamata la procedura che prende iningresso una copia del valore di x e loincrementa

    questo per non ha effetto sul contenuto del lavar iabi le x

    infatti quando success ivamente viene s tampatoi l valore di x questo sempre 5

  • 9

    Esempio

    Si cons ider i i l seguente programma: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

    Questa volta la var iabi le s tata passata perr ifer imento

    Questo s ignifica che la procedura va amodificare i l contenuto della var iabi le x

    Infatti al la fine del lelaboraz ione i l valore di x s tato incrementato e vale 6

  • 10

    Nota

    Attenzione!!!

    Di default i l VBA cons idera le var iabi l i passateper r i fer imento e quindi ci che s i modifica inuna procedura ha effetto sul la var iabi le cheviene passata

    Pregi/difetti delle due modalit

    Ognuna delle due modalit r isulta vantaggiosase applicata con una final i t opportuna

    I l passaggio per valore permette di essere s icur iche la procedura non modificher le var iabi l icontenute nel programma che s ta usando tal iprocedure

    I l passaggio per r i fer imento pi veloce perchnon deve eseguire una copia

    Inoltre i l passaggio per r i fer imento permette diagire su un numero arbitrar io di var iabi l i

  • 11

    Funz ioni vs . Procedure

    Mentre una funz ione pu res tituire un unicovalore al termine della sua esecuz ione, unaproceedura pu prendere in ingresso perr ifer imento pi var iabi l i e modificarne tutti ivalor i

    tuttavia l uso del le funz ioni permette diuti l iz z are i l nome del la funz ione s tessaall interno di espress ioni pi complesse

    Esempio

    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

  • 12

    Esempio

    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

    Esempio

    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

  • 13

    Funz ioni predefinite in Word

    Sono a dispos iz ione un elevato numero difunz ioni predefinite

    una funz ione predefinita quando non necessar io scr iverne i l programma per l utente

    Noi tratteremo solo alcune uti l i funz ioni : funz ioni per la rappresentaz ione di s tr inghe funz ioni per l inser imento/acquis iz ione di informaz ioni funz ioni per la manipolaz ione di s tr inghe funz ioni di convers ione

    Funz ioni per la rappresentaz ioneMsgBox

    La funz ione MsgBox serve per creare unafinestra sul la quale scr ivere una s tr inga

    la s intass i :MsgBox stringa

    Esempio:Dim frase As String

    frase=questa e una prova

    MsgBox frase

  • 14

    Nota

    Per scr ivere un messaggio su pi l inee sufficiente inser ire opportuni vbCrLf

    per scr ivere i l valore di una var iabi le sufficiente passare tale valore al la funz ione (i lnumero viene automaticamente convertito ins tr inga)

    Es :Dim myInt As Integer

    myInt=34

    MsgBox myInt

    Funz ioni per l acquis iz ioneInputBox

    Per acquis ire una s tr inga s i usa la funz ioneInputBox con la seguente s intass i :Dim leggo As String

    leggo=InputBox(messaggio per lutente)

  • 15

    Funz ioni per s tr inghe

    Ecco una l is ta di uti l i funz ioni per manipolare les tr inghe:

    Len, Left, Right, Mid, Str , Val, T r im

    Funz ioni per s tr inghe

    Len: res tituisce la lunghez z a (cio i l numero dicaratter i) di una s tr inga, compres i spaz i, segnidi interpunz ione etc.

    Es : Len(Oggi piove) res tituisce 10

  • 16

    Funz ioni per s tr inghe

    Left, Right, Mid: res tituiscono la porz ione di unastr inga r ispettivamente pi a s inis tra, destra, nelcentro

    Left(parola, num): res tituisce un numero par i anum caratter i a parti re da s inis tra del la s tr ingaparola

    Es : Left(Oggi piove, 6) res tituisce Oggi p

    Analogamente per la funz ione Right

    Funz ioni per s tr inghe

    La funz ione Mid prende in ingresso una s tr ingae due numer i

    Mid(parola, iniz io, lunghez z a) Es :

    Mid(Oggi piove, 3,4) res tituisce gi p

  • 17

    Funz ioni per s tr inghe

    La funz ione Str converte un numero in s tr inga Es :

    Str(123) res tituisce la s tr inga 123

    La funz ione Val converte una s tr inga in unnumero

    Es : Val(34.5) res tituisce i l numero 34.5

    ma anche: Val(50123 Firenz e) res tituisce i l num 50123

    Funz ioni per s tr inga

    La funz ione T r im serve per el iminare spaz ial l iniz io e al termine di una parola

    Es : T r im( casa ) res tituisce la s tr inga casa

Recommended

View more >