Università degli Studi di Brescia Elementi di Informatica e … · 2019-08-24 · Docente: Marco...
Transcript of Università degli Studi di Brescia Elementi di Informatica e … · 2019-08-24 · Docente: Marco...
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.I
Dipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le
Dipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
leCo
rso di laurea
: Ing
egne
ria Gestio
nale
Elem
enti di inform
atica e prog
rammazione
Elementi di Informatica e Programmazione
Docente: Marco SechiE‐mail: [email protected]
Università degli Studi di Brescia
PROGRAMMAZIONEPROGRAMMAZIONE
Vers. 22/11/2015****
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
2
Funzioni e Oggetti principali in VBA
https://msdn.microsoft.com/en‐us/library/office/jj692818.aspx
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
3Il VBA mette a disposizione un numero elevato di funzioni che possono essere utilizzate per velocizzare la scrittura dei programmi. L'elenco completo, consultabile online, è il seguente:
https://msdn.microsoft.com/en‐us/library/office/jj692818.aspx
Per richiamare una funzione basta digitarne il nome seguito dai parametri che si intende passargli
Variabile=NOMEFUNZIONE(Argomento1, … [ArgomentoN])
Si rammenta che gli argomenti possono essere anche delle costanti (12, "Ciao" …) oppure essere delle variabili (Esito, NatoIl, etc.). La variabilememorizzerà il valore restituito dalla funzione.
Alcune funzioni non restituiscono valori ma eseguono solo delle operazioni (si tratta quindi di Sub). In questo caso non è necessario salvare un risultato in una variabile e pertanto dobbiamo usare una delle due modalità:
NOMESUB Argomento1, … [ArgomentoN]
oppure
CALL NOMESUB(Argomento1, … [ArgomentoN])
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
4Accanto alle funzioni Excel mette a disposizione un insieme di oggettialtrettanto vasto consultabile al seguente indirizzo:
https://msdn.microsoft.com/en‐us/library/office/ff194068.aspx
Un oggetto non è altro che una struttura dati associata ad un elemento presente nell'interfaccia del programma (fogli, bottoni, cartelle, celle etc.) Gli oggetti sono dotati di proprietà (caratteristiche) che permettono di operare sull'aspetto o sui contenuti dell'elemento di interfaccia associato.La presenza di metodi (azioni) consente di automatizzare una sequenza di operazioni e modifiche sugli elementi dell'interfaccia.
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
5Infine la capacità di tali oggetti di rilevare determinati eventi (accadimenti) permette di far variare il percorso di esecuzione a secondo di quello che succede rendendo il programma adattabile all'evolversi della situazione.
Quando si digita il codice VBA l'ambiente di sviluppo integrato (IDE) fornisce numerosi suggerimenti che aiutano enormemente la persona che digita il codice.
METODI
PROPRIETA'
EVENTI
OggettoEventi associati
FUNZIONI
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
6
FINESTRA IMMEDIATA
Molto utile risulta la "Finestra immediata" sia per provare i vari comandi durante la fase di studio ma anche nella fase di debug (test del programma per verificarne la correttezza semantica rispetto all'algoritmo che abbiamo deciso di implementare per risolvere un determinato problema)
Esiste un'istruzione VBA che ci consente di scrivere all'interno della finestra immediata:Debug.print "Questo si vede nella finestra immediata"
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
7
LEN, LEFT, RIGHT, MID, INSTR, SPACE, INSTRREV, UCASE, LCASE, TRIM, LTRIM, RTRIM, REPLACE, SPACE, STRING, CHR, ASC
Funzioni di manipolazione stringhe
LEFT(argomento,N)La funzione LEFT vuole 2 argomenti. Il 1° è una stringa (esempio "Ciao") mentre il 2° (N) è un intero. LEFT restituisce i primi N caratteri della stringa passata come 1° argomento.
Left("Questa è una frase",4) ==> "Ques"
LEN(Stringa) Restituisce la lunghezza in caratteri della stringa passata come argomento.
len("Questa è una frase ") ==> 19
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
8RIGHT(argomento,N)La funzione RIGHT vuole 2 argomenti. Il 1° è una stringa (esempio "Ciao") mentre il secondo (N) è un intero . RIGHT restituisce gli ultimi N caratteri della stringa passata come 1° argomento.
Right("Questa è una frase",4) ==> "rase"
MID(Stringa,I,N) La funzione MID restituisce, partendo dall'I‐esimo carattere, N caratteri estratti dalla stringa passata come 1° argomento.
mid("Questa è una frase", 3, 8) ==> "esta è u"Mid(Frase,i,1) ==> i-esimo carattere della stringa Frase
Quando ometto il 3° argomento la funzione MID estrae tutti i caratteri a partire dalla lettera di posizione I (compresa).
mid("Questa è una frase", 10) ==> "una frase"mid("Questa è una frase",len("Questa è una frase")-1)==>"se"
Attenzione: La posizione di un carattere in una stringa va calcolata tenendo presente che la numerazione parte da 1 e non da 0 come solitamente avviene in linguaggi come il Javascript o php.
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
9INSTR(StringaDoveCerco,StringaCercata)Restituisce la posizione della prima occorrenza di una stringa (StringaCercata) all'interno di un'altra (StringaDoveCerco). Se non trova niente restituisce 0.
Instr("Questa è una frase fraintesa", "fra") ==> 14Instr("Questa è una frase", "ciao") ==> 0
Esempio: l'utilizzo combinato delle funzioni INSTR, MID, LEFT consente di separare in una mail il dominio dall'identificativo utente:
Mail="[email protected]"Left(Mail,Instr(Mail,"@")-1) ==> "cormatron"Mid(Mail, Instr(Mail,"@")+1) ==> "libero.it"
In realtà esiste un primo argomento opzionale start che consente di specificare da che punto deve iniziare la ricerca:
Instr(15,"Questa è una frase fraintesa", "fra") ==> 20
SPACE(N) Restituisce una stringa composta da N spazi.
Space(5) ==> " "
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
10INSTRREV(DoveCerco,CosaCerco)Restituisce la posizione dell'ultima occorrenza di una stringa (CosaCerco) all'interno di un'altra (DoveCerco). Se non trova niente restituisce 0.
Instrrev("Questa è una frase fraintesa", "fra") ==> 20Instrrev("Questa è una frase", "ciao") ==> 0
Esempio: l'utilizzo combinato delle funzioni INSTRREV e MID consente di separare il nome del file dal percorso delle cartelle:
PercorsoCompleto="c:\pioppo\pluto\caio\prg.xlsx"Mid(PercorsoCompleto, Instrrev(PercorsoCompleto,"\")+1) ==> "prg.xlsx"
UCASE(Stringa) - LCASE(Stringa)Ucase restituisce la stringa passata come Argomento in caratteri maiuscoli. Lcase restituisce la stringa passata come Argomento in minuscolo.
Esempio: combinando le funzioni Ucase e Lcase possiamo trasformare il contenuto di una cella in modo che venga scritto tutto in minuscolo esclusa la prima lettera (In vba la funzione StrConv(Nome,vbProperCase) produce lo stesso risultato)
Nome="mArCo"Ucase(left(Nome,1))+lcase(mid(Nome,2)) ==>"Marco"
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
11
TRIM(Stringa) RTRIM(Stringa) LTRIM(Stringa)Restituisce l'argomento (di tipo stringa) privo degli spazi iniziali e finali.
Trim(" Questa è bella ") ==> "Questa è bella"
La funzione LTrim elimina dalla stringa passata come argomento gli spazi iniziali.
LTrim(" Questa è bella ") ==> "Questa è bella "
La funzione RTrim elimina dalla stringa passata come argomento gli spazi finali.
RTrim(" Questa è bella ") ==> " Questa è bella"
REPLACE(Stringa, CosaCerco, CosaMetto) Restituisce la stringa ottenuta sostituendo nel 1° argomento tutte le occorrenze della sottostringa CosaCerco con la stringa CosaMetto passata come 3° argomento
Replace("Ciao sono Marco", "o", "*") ==> Cia* s*n* Marc*"
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
12STRING(N,Carattere) Restituisce una stringa composta da N repliche del Carattere passato come 2°argomento.
String(5, "*") ==> "*****"String(5, " ") ==> Space(5)
ASC(Carattere) Restituisce il codice ascii del carattere che è passato come argomento.
Asc("A") ==> 65Asc(vbTab) ==> 9Asc(" ") ==> 32Asc("a") ==> 97
CHR(Numero)La funzione CHR restituisce il carattere il cui codice ascii è passato come argomento.
CHR(65) ==> "A"CHR(9) ==> vbTabCHR(13) & CHR(10) == > vbCrLF
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
13
Function MYREPLACE(ByVal StringaOriginale As String, _StringaDaRimpiazzare As String, _StringaNuova As String) As String
Dim StringaFinale As StringDim ParteSinistra As StringDim ParteDestra As StringDim DoveELaStringaDaRimpiazzare As Long
StringaFinale = ""DoveELaStringaDaRimpiazzare = InStr(StringaOriginale, StringaDaRimpiazzare)While DoveELaStringaDaRimpiazzare > 0
ParteSinistra = Left(StringaOriginale, DoveELaStringaDaRimpiazzare - 1)ParteDestra = Mid(StringaOriginale, DoveELaStringaDaRimpiazzare + Len(StringaDaRimpiazzare))StringaFinale = StringaFinale + ParteSinistra + StringaNuovaStringaOriginale = ParteDestraDoveELaStringaDaRimpiazzare = InStr(StringaOriginale, StringaDaRimpiazzare)
WendMYREPLACE = StringaFinale + StringaOriginale
End Function
ESEMPIO: In origine la funzione Replace non esisteva. Era necessario implementarla sfruttando le altre funzioni disponibili in VBA.
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
14
CLNG, CDBL, FIX, FORMAT, CSTR, CDATE, INT
Funzioni di conversione
CDBL(argomento)Converte, se possibile, la stringa passata come Argomento in double (numero in precisione doppia) altrimenti genera un errore
CDbl("1,002") ==> 1.002CDbl("A") ==> ERRORE: Tipo non corrispondente
CLNG(Argomento) Converte l'Argomento, se è possibile, in un long (numero intero lungo a 32 bit).
CLng(1.002) ==> 1CLng(#12/31/1899#) ==> 1
In presenza di decimali arrotonda per difetto o per eccesso all'unità più vicina
CLng("1,51") ==> 2CLng("1,5") ==> 2CLng(1.49) ==> 1
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
15 FIX(Numero) Elimina la parte decimale del Numero passato come argomento, senza arrotondare
Fix(1.51) ==> 1Fix(1.49) ==> 1
FORMAT(Valore,MascheraFormato) Trasforma il primo parametro Valore secondo le specifiche indicate in MascheraFormato. Nella tabella seguente sono elencati alcuni esempi relativi a formati di tipo numerico
Maschera di formato Esempio Risultato Descrizione
"#,##0.00" format(0.009,"#,##0.00") 0,01 Si osservi: un numero con parte intera pari a zeroviene visualizzato con lo 0 iniziale.
"#,###.00"format(1000.014,"#,##0.00") 1.000,01
Se il numero di cifre decimali è superiore a quello indicato nella maschera di formato allora il numero viene arrotondato per difetto o eccesso a seconda.
format(0.009,"#,###.00") ,01 Si osservi: un numero con parte intera pari a zero viene visualizzato senza lo 0 iniziale
00000 Format(1,"00000") 00001
Segnaposto di cifra. Visualizza una cifra o uno zero. Se l'espressione contiene una cifra nella posizione in cui compare lo 0 nella stringa del formato, tale cifra verrà visualizzata; in caso contrario in tale posizione verrà visualizzato uno zero.
"#,##0 \L\i\r\e""#,##0 ""Lire"""
format(1000.014,"#,##0.00 \L\i\r\e")format(1000.014,"#,##0.00 ""Lire""") 1000 Lire
Se voglio scrivere delle frasi per evitare di confonderle con le sigle della maschera di formato ogni lettera va scritta facendola precedere con uno \
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
16Nella tabella sottostante sono elencate le specifiche relative a formati di tipo data/ora
Maschera di formato Esempio Risultato Descrizione
"d" format(#12/02/2005 12.00.23#,"d") 2 Visualizza il giorno come numero senza zero iniziale (1 – 31)."dd" format(#12/02/2005 12.00.23#,"dd") 02 Visualizza il giorno come numero con zero iniziale (01 – 31).
"ddd" format(#12/02/2005 12.00.23#,"ddd") ven Visualizza il giorno abbreviato (dom – sab).
"dddd" format(#12/02/2005 12.00.23#,"dddd") venerdì Visualizza il giorno per esteso (domenica – sabato)
"w" format(#12/02/2005 12.00.23#,"w") 6 Visualizza il giorno della settimana come numero (1 per domenica-7 per sabato).
"ww" format(#12/02/2005 12.00.23#,"ww") 49 Visualizza la settimana di un anno come numero
"m" format(#1/15/2005 12.00.23#,"m") 1Visualizza il mese come numero senza zero iniziale (1 – 12). Se m segue immediatamente h o hh, viene visualizzato il valore relativo ai minuti anziché il mese.
"mm" format(#1/15/2005 12.00.23#,"mm") 01Visualizza il mese come numero con zero iniziale (01 – 12). Se m segue immediatamente h o hh, viene visualizzato il valore relativo ai minuti anziché il mese.
"mmm" format(#1/15/2005 12.00.23#,"mmm") gen Visualizza il mese abbreviato (gen – dic)."mmmm" format(#1/15/2005 12.00.23#,"mmmm") gennaio Visualizza il mese con il relativo nome per esteso (gennaio – dicembre).
"q" format(#12/02/2005 12.00.23#,"q") 4 Visualizza il trimestre dell'anno come numero (1 – 4)."y" format(#12/02/2005 12.00.23#,"y") 336 Visualizza il giorno dell'anno come numero (1 – 366).
"yy" format(#12/02/2005 12.00.23#,"yy") 05 Visualizza l'anno come numero di due cifre (00 – 99).
"yyyy" format(#12/02/2005 12.00.23#,"yyyy") 2005 Visualizza l'anno come numero di quattro cifre (100 – 9999).
"h" format(#12/02/2005 01.02.03#,"h") 1 Visualizza l'ora come numero senza zero iniziale (0 – 23)."hh" format(#12/02/2005 01.02.03#,"hh") 01 Visualizza l'ora come numero con zero iniziale (00 – 23)."n" format(#12/02/2005 01.05.03#,"n") 2 Visualizza i minuti come numero senza zero iniziale (0 – 59).
"nn" format(#12/02/2005 01.05.03#,"nn") 02 Visualizza i minuti come numero con zero iniziale (00 – 59)."s" format(#12/02/2005 01.02.03#,"s") 3 Visualizza i secondi come numero senza zero iniziale (0 – 59).
"ss" format(#12/02/2005 01.02.03#,"ss") 03 Visualizza i secondi come numero con zero iniziale (00 – 59)
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
17 I singoli elementi presentati nella tabella precedente possono essere combinati tra loro come nell'esempio seguente
format(#12/02/2005 01.02.03#,"dddd, d mmmm yyyy \o\r\e hh.nn.ss") ==> "venerdì, 2 dicembre 2005 ore 01.02.03"
Nella successiva tabella sono elencati alcuni esempi relativi a valori di tipo stringaMaschera di formato Esempio Risultato Descrizione
">" format("ciao",">") "CIAO" Applica le maiuscole. Visualizza tutti i caratteri in maiuscolo."<" format("ciao","<") "ciao" Applica le minuscole. Visualizza tutti i caratteri in minuscolo."@" format("ciao","@@@@@@") "ciao " Segnaposto di carattere. Visualizza un carattere o uno spazio. Se la stringa
include un carattere nella posizione in cui compare @ nella stringa di formato, tale carattere verrà visualizzato, in caso contrario in tale posizione verrà visualizzato uno spazio. I segnaposto vengono riempiti da destra a sinistra, a meno che non vi sia un punto esclamativo (!) nella stringa di formato.
"!@" format("ciao","!@@@@@@") " ciao"
CSTR(Argomento) Converte l'Argomento passato in stringa
Cstr(1.002) ==> "1,002"Cstr(#11/26/2005#) ==> "26/11/2005"Cstr(True) ==> "Vero"
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
18CDATE(Argomento) Converte l'argomento passato, se è possibile, in data/ora
CDate(1) ==> #12/31/1899#CDate(0.25) ==> #06:00:00#CDate("01/01/2015") ==> #1/1/2015 0.00#CDate("29/02/2015") ==> ERRORE di run-time '13'
INT(Numero) Simile a Fix elimina la parte decimale senza arrotondamenti. Differisce per il suo comportamento sui numeri negativi.
Int(-98.3) ==> -99Fix(-98.3) ==> -98
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
19
IIF(Condizione,ValoreSeVero, ValoreSeFalso)
Restituisce il 2° parametro se la Condizione è vera altrimenti il 3° parametro.
iif(Esito>=18,"Superato", "Non superato")
Funzioni di test e logicheIIF, ISEMPTY, ISNUMERIC, ISDATE, ISNULL, IS, NZ
ISEMPTY(Argomento) Restituisce Vero se l'argomento è una variabile di tipo variant alla quale non è stato mai assegnato un valore altrimenti Falso.
Dim XDim Y As Longdebug.print IsEmpty(X) ==> Truedebug.print IsEmpty(Y) ==> False
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
20ISNUMERIC(Argomento) Restituisce Vero se il parametro passato è trasformabile in un numero altrimenti Falso.
IsNumeric("1,51") ==> TrueIsNumeric("1a,51") ==> False
ISDATE(Argomento) Restituisce vero se il parametro passato è trasformabile in un tipo data/ora altrimenti falso.
IsDate("31/02/2015") ==> FalseIsDate("31/12/2015") ==> TrueIsDate(1) ==> False
ISNULL(Argomento) Restituisce Vero se l'argomento passato come parametro è Null. Una variabile X di tipo variant viene inizializzata in modo esplicito con l'istruzione X=Null per evidenziare che non contiene un valore accettabile.
X=Null: IF ISNULL(X) THEN MSGBOX "NULLO!!"
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
21Variabile IS Nothing Non si tratta di una funzione ma di un operatore di confronto applicabile a variabili di tipo Object. Viene utilizzato per testare se una variabile è stata in qualche modo assegnata.
Dim O as ObjectIF (O Is Nothing) Then MsgBox "Mai assegnata"
NZ(Argomento, ValoreSeNullo) Restituisce il 2° parametro ValoreSeArgomentoNullo se il primo Argomento vale Nullaltrimenti ritorna il valore di Argomento. Corrisponde alla seguente sequenza VBA:
iif(IsNull(Argomento), ValoreSeNullo, Argomento)
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
22
Sub ProveIS()Dim X As Variant ' Y non è dichiarataDim O As ObjectDim I As Long
Debug.Print "IsNull(Y) := " & IsNull(Y)Debug.Print "IsEmpty(Y) := " & IsEmpty(Y)Debug.Print "IsNull(X) := " & IsNull(X)Debug.Print "IsEmpty(X) := " & IsEmpty(X)Debug.Print "IsNull(I) := " & IsNull(I)Debug.Print "IsEmpty(I) := " & IsEmpty(I)Debug.Print "IsNull(O) := " & IsNull(O)Debug.Print "IsEmpty(O) := " & IsEmpty(O)Debug.Print "O IS Nothing := " & (O Is Nothing)Y = 1: X = 1: I = 1 ' Valorizzo le variabiliSet O = Application ' Valorizzo un oggettoDebug.Print "-------------------------------"Debug.Print "IsNull(Y) := " & IsNull(Y)Debug.Print "IsEmpty(Y) := " & IsEmpty(Y)Debug.Print "IsNull(X) := " & IsNull(X)Debug.Print "IsEmpty(X) := " & IsEmpty(X)Debug.Print "IsNull(I) := " & IsNull(I)Debug.Print "IsEmpty(I) := " & IsEmpty(I)Debug.Print "IsNull(O) := " & IsNull(O)Debug.Print "IsEmpty(O) := " & IsEmpty(O)Debug.Print "O IS Nothing := " & (O Is Nothing)Debug.Print "-------------------------------"X = NullI = vbNullDebug.Print "IsNull(X) := " & (IsNull(X))Debug.Print "IsNull(I) := " & IsNull(I)
End Sub
ESEMPIO: Utilizzo delle funzioni di test
IsNull(Y) := FalsoIsEmpty(Y) := Vero
IsNull(X) := FalsoIsEmpty(X) := Vero
IsNull(I) := FalsoIsEmpty(I) := Falso
IsNull(O) := FalsoIsEmpty(O) := FalsoO IS Nothing := Vero-------------------------------IsNull(Y) := FalsoIsEmpty(Y) := FalsoIsNull(X) := FalsoIsEmpty(X) := FalsoIsNull(I) := FalsoIsEmpty(I) := FalsoIsNull(O) := FalsoIsEmpty(O) := FalsoO IS Nothing := Falso-------------------------------IsNull(X) := VeroIsNull(I) := Falso
Finestra Immediata
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
23
DATE()Restituisce la data di oggi
NOW() Restituisce la data e l'ora attuale.
TIME()Restituisce l'ora attuale.
Funzioni temporaliDATE, NOW, TIME, DAY, MONTH, YEAR, WEEKDAY, HOUR, MINUTE, SECOND, TIMEVALUE
DAY(Argomento)Restituisce il giorno del mese della data passata come Argomento.
DataDiNascita=#12/31/1927#Day(DataDiNascita)=31
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
24MONTH(Argomento)Restituisce il mese della data passata come Argomento.
DataDiNascita=#12/31/1927#Month(DataDiNascita) ==> 12If Month(DataDiNascita)<>Month(DataDiNascita+1) then
msgbox "Sei nato l'ultimo giorno del mese"else
msgbox "Non sei nato l'ultimo giorno del mese"End if
YEAR(Argomento)Restituisce l'anno della data passata come Argomento.
DataDiNascita=#12/31/1927#If Year(DataDiNascita)<>Year(DataDiNascita+1) then
msgbox "Sei nato l'ultimo giorno dell'anno"else
msgbox "Non sei nato l'ultimo giorno dell'anno"End if
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
25
WEEKDAY(Argomento)Restituisce il giorno della settimana (in numero) della data passata come Argomento. (1 domenica, 2 lunedì etc.).
if WeekDay(DataDiNascita)=1 Thenmsgbox "Sei nato di domenica"
end if
Lo stesso risultato poteva essere ottenuto con questa sequenza vba:
if Format(DataDiNascita,"mmm")="dom" Thenmsgbox "Sei nato di domenica"
end if
HOUR(Argomento)Restituisce l'ora dell'istante passato come Argomento.
MINUTE(Argomento)Restituisce i minuti dell'istante passato come Argomento.
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
26SECOND(Argomento)Restituisce i secondi dell'istante passato come Argomento.
Secondi=HOUR(Now())*60*60+MINUTE(Now())*60+SECOND(Now())
TIMEVALUE(Argomento)Trasforma una stringa contenente un orario nel numero seriale corrispondente pertanto la seguente istruzione
Tra10Secondi=Now()+TimeValue("00:00:10")
indica l'orario tra 10 secondi. Potevo anche scrivere
Tra10Secondi=Now()+CDate("00:00:10")
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
27
RND, SQR, DOEVENTS
Funzioni varie
SQR(Valore)Restituisce la radice quadrata di un numero. Se negativo genera un errore
Sqr(16) ==> 4
RND([Numero]) Genera un numero casuale di tipo single all'interno dell'intervallo [0,1). Se Numero è ‐ negativo genera sempre lo stesso valore‐ zero restituisce l'ultimo valore generato‐ se positivo o omesso genera un nuovo numero casuale
Fix(Rnd()*6)+1 ==> genera un numero intero tra 1 e 6Rnd()*(B-A)+A ==> genera un valore nell'intervallo [A,B)Fix(Rnd()*(B-A+1))+A ==> genera un numero intero tra A e B
Solitamente si utilizza l'istruzione Randomize(numero) per inizializzare la sequenza generata da Rnd. Senza argomenti Randomize utilizza come seme il valore restituito dall'orologio di sistema.
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
28DOEVENTS()DoEvents passa il controllo al sistema operativo. Quando questo ha terminato l'elaborazione sia degli eventi in coda che di tutti i caratteri presenti nel buffer di input della tastiera, ripassa il controllo allo script VBA che riprende la sua esecuzione. DoEvents risulta utile per intercettare un input (ad esempio un click su un checkbox) chel'utente ha eseguito per cancellare l'esecuzione di un processo attivo quando siamo all'interno di un Loop.
Sub AttivaOrologio()Range("C2") = FalseDo While True ' Loop infinito
' C2 è connesso al CheckBox di STOPIf Range("C2") = True Then Exit DoDoEventsRange("B4") = Format(Now, "hh:mm:ss")Application.Wait (Now + TimeValue("00:00:01"))
LoopEnd Sub
Cliccando su "Attiva orologio" la cella "C2" diventa True. Il loop infinito Do While si ferma quando spunto il checkbox "STOP". Application.Waitsospende l'esecuzione di un secondo dopo aver aggiornato l'orario nella cella "B4"
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
29
ARRAY, LBOUND, UBOUND, SPLIT, ISARRAY, JOIN
Funzioni Array
ARRAY(Arg1, Arg2, …, ArgN) Restituisce un array i cui elementi corrispondono agli N valori passati come argomento.
Dim Saluti as VariantSaluti=Array("Ciao","Arriverderci","Ave", "A dopo")
LBOUND(Array [,Dimensione])Restituisce il limite inferiore della dimensione indicata come secondo argomento. Se dimensione è omesso allora viene restituita la primaDim X(-1 to 2, 3 to 4, 5 to 6)LBOUND(X,2) ==> 3LBOUND(X) ==> -1
UBOUND(Array [,Dimensione])Restituisce il limite superiore della dimensione indicata come secondo argomentoDim X(-1 to 2, 3 to 4, 5 to 6)UBOUND(X,3) ==> 6
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
30 SPLIT(Stringa,[Separatore],[NrValori])Restituisce una matrice unidimensionale che contiene come elementi le sottostringhe delimitate dal carattere separatore. Il limite inferiore dell'array restituito è sempre 0 anche se con Option Base ho specificato altro. Il separatore è un qualsiasi Stringa. La ricerca del separatore è di default è case sensitive. Un quarto argomento, qui non illustrato, consente la modifica di tale comportamento predefinito. Se ometto il separatore, viene assunto come delimitatore lo spazio. Se il Separatore è "" oppure non è presente nel parametro Stringa allora Split restituisce una matrice con un singolo elemento contenente l'intera stringa.
Split("Inverno Primavera Estate Autunno") ==> Array("Inverno","Primavera","Estate","Autunno")Split("Inverno;Primavera;Estate;Autunno", ";", 2)==> Array("Inverno","Primavera,Estate,Autunno")
ISARRAY(Stringa,Separatore,NrValori)Restituisce vero se l'argomento passato è un array, falso altrimentiDim X(10), YDebug.print IsArray(X) '==> trueDebug.print IsArray(Y) '==> falseY=Split("1;2;3",";")Debug.print IsArray(Y) '==> true
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
31JOIN(Matrice,Separatore)Restituisce una stringa creata unendo gli elementi della matrice in un'unica sequenza di valori separati con il carattere separatore. Il Separatore è una qualsiasi stringa e viene utilizzata per separare le sottostringhe ricavate dagli elementi della matrice. Se omesso, verrà automaticamente utilizzato lo spazio (" "). Se il separatore è la stringa di lunghezza zero ("") tutte le voci dell'elenco verranno concatenate senza alcun delimitatore.
Join(Array("Inverno","Primavera","Estate","Autunno"),"/")==> "Inverno/Primavera/Estate/Autunno"Join(Array("Inverno","Primavera","Estate","Autunno"))==> "Inverno Primavera Estate Autunno"Join(Array("Inverno","Primavera","Estate","Autunno"),"")==> "InvernoPrimaveraEstateAutunno"
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
32OGGETTI
https://msdn.microsoft.com/en‐us/library/office/ff194068.aspx
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
33applicationRappresenta l'applicazione stessa ovvero EXCEL.
Proprietà Tipo Descrizione
name String Restituisce il nome dell'applicazione ovvero: "MicrosoftExcel"
pathseparator String Separatore delle cartelle in un percorso. Utile se utilizzo altri sistemi operativi diversi da Windows
path String Percorso dell'applicazione ovvero:"C:\Program Files\Microsoft2013\Office15"
activecell Range E' l'oggetto associato alla cella attiva
thisWorkBook Workbook E' l'oggetto associato alla cartella attiva (in foreground)
activeSheet WorkSheet E' l'oggetto associato al foglio attivo
cursor Long Forma del cursore. Valori costanti ammessi:xlDefault Puntatore di default (cambia a secondo dell'oggetto sottostante)xlIBeam Puntatore I-beam xlNorthwestArrow puntatore Freccia classicohWest.xlWait puntatore di Occupato (hourglass)
EnableEvents boolean Disabilita/Abilità gli eventi.Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = FalseMe.Range("B1") = Target.AddressLocalApplication.EnableEvents = True
End Sub
https://msdn.microsoft.com/en‐us/library/office/ff194565.aspx
PROPRIETA'
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
34Proprietà Tipo Descrizione
WorkSheets WorkSheets Insieme dei fogli della cartella corrente
WorkBooks Workbooks Insieme dei files di Excel aperti
UserName String Nome dell'account connesso al sistema
ScreenUpdating Boolean Attiva/disattiva l'aggiornamento del videoapplication.ScreenUpdating=false
DefaultFilePath String Cartella di salvataggio dei files ad esempio:"C:\Users\Marco\Documents"
Metodi Descrizione
Quit Chiude l'applicazione
Calculate Ricalcola il foglio (equivale al tasto F9)
SendKeys Simula la digitazione dei singoli caratteri contenuti nell'argomentoApplication.SendKeys "Ciao"
Doubleclick Simula il doppio click sulla cella attiva (mandando in modalità edit la cella)
Wait Sospende l'esecuzione fino all'ora indicata:application.wait "18:01:23"application.wait now()+timeValue("00:00:10")
GetSaveAsFileName Apre la finestra di dialogo SAVE AS per il salvataggio del file e restituisce il nome dato al file nel caso di conferma, falso altrimenti.
METODI
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
35workbooksRappresenta l'insieme dei file aperti
Proprietà Tipo Descrizione
count Integer Restituisce il numero di file di Excel aperti
workbooks(1) Workbook Prima cartella aperta con Excel
workbooks("nome") Workbook Oggetto che identifica la cartella che ha quel nome
https://msdn.microsoft.com/EN‐US/library/office/ff841074.aspx
PROPRIETA'
Metodo Descrizione
Close Chiude tutti i files aperti
Open Apre il file indicato come argomentoWorkbooks.Open("C:\MyFolder\MyBook.xlsx")
Add Crea una nuova cartella di lavoro vuota
METODI
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
36Worksheets - SheetsRappresenta l'insieme dei fogli aperti. Sheets differisce da Worksheets poiché contiene anche i fogli grafico.
Proprietà Tipo Descrizione
count Integer Restituisce il numero di fogli del workbook attivo (file)
worksheets(1) Worksheet Primo foglio della cartella di lavoro attiva (thisWorkBook)
Sheets("nome") Worksheet Oggetto che identifica il foglio del workbook attivo che ha quel nome
https://msdn.microsoft.com/en‐us/library/office/ff821537.aspx
PROPRIETA'
Metodo Descrizione
Add Aggiunge dei nuovi fogli prima/dopo altri fogliWorksheets.Add Count:=2, Before:=Sheets(1)
METODI
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
37workbookOggetto che rappresenta uno dei files aperti
Proprietà Tipo Descrizione
Name String Restituisce il nome del filethisWorkBook.name
WorkSheetsSheets
Worksheets Collezione contenente tutti i fogli della cartella associata al WorkBook. Nell'esempio sottostante il numero di fogli della cartella correntethisWorkBook.WorkSheets.count
FullName String Nome completo del file con tutto il percorsothisWorkBook.FullName
ActiveSheet WorkSheet E' l'oggetto associato al foglio attivo della cartella di lavoro del WorkBook utilizzatothisWorkBook.ActiveSheet.name
Parent Object Restituisce l'oggetto padre. Ad esempio il padre della cartella di lavoro corrente è Application come si può verificare nell'esempio sottostantethisWorkbook.parent.name "Microsoft Excel"
https://msdn.microsoft.com/EN‐US/library/office/ff835568.aspx
PROPRIETA'
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
38
Metodo Descrizione
Close Chiude la cartella di lavoro associata all'oggetto WorkBookWorkbooks(1).Close savechanges:=True FileName:="Caio.xlsx"Workbooks(1).Close True, "Caio.xlsx" ' Equivalente
Activate Porta il file associato all'oggetto WorkBook in foreground (lo attiva!)
Save Registra su disco le modifiche apportate in memoria alla cartella di lavoro associata al nostro oggetto WorkBook.
SaveAs Metodo analogo al menu "Salva con Nome" ma non apre la finestra di dialogo.Set NewBook = Workbooks.Add ' Nuova CartellaDo
fName = Application.GetSaveAsFilename Loop Until fName <> False NewBook.SaveAs Filename:=fName
SendMail Invia la cartella di lavoro associata per posta. Per funzionare devo avere un client di posta configurato
METODI
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
39
worksheetE' l'oggetto che rappresenta un foglio di Lavoro.
Proprietà Tipo Descrizione
Cells Cells Restituisce l'insieme delle celle del foglioactiveSheet.Cells(1,1)="Ave"
Name String Nome del foglioactivesheet.name
Shapes Collection Collezione delle forme presenti sul foglio
Visible Boolean Consente di occultare il foglioactiveSheet.visible=false Nascondo il foglio
Range Object Intervallo di celle del foglioactiveSheet.Range("A1").FormulaLocalWorkSheets("Foglio1").Range("A2")=91
https://msdn.microsoft.com/en‐us/library/office/ff194464.aspx
PROPRIETA'
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
40
https://msdn.microsoft.com/en‐us/library/office/ff194464.aspx
Metodo Descrizione
Copy Copia il foglio prima/dopo un altro foglioWorksheets("Sheet1").Copy After:=Worksheets("Sheet3")
Select Porta il foglio in foreground. E' equivalente ad activate.
Delete Richiede se il foglio deve essere rimossoWorksheets("Foglio2").delete
Move Sposta il foglio prima/dopo un altro foglioWorksheets("Foglio1").Move After:=Worksheets(3)
METODI
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
41RangeE' l'oggetto che rappresenta un sotto insieme di celle di un foglio di Lavoro.
Proprietà Tipo Descrizione
Cells Range Restituisce l'insieme delle celle contenute nell'intervallo del RangeRange("B2:C4").Cells(1,1) punta alla cella B2
AddressAddressLocal
String Restituisce l'indirizzo delle celle nel linguaggio delle macro e di quello dell'utenteRange("A1").AddressLocal $B$2
count Integer Numero di elementi nella collezione (range)font Font Restituisce un oggetto font che rappresenta il carattere utilizzato
per quell'intervallorange("A2").Font.Name "Calibri"range("A2").Font.Name=11 imposto la dimensione
Value Variant Valore o il risultato della formula presente all'interno della cellaactiveSheet.Range("A1").value risultato
FormulaFormulaLocal
String Formula contenuta nella cella secondo la lingua interna usata dalle macro mentre la seconda rispetto a quella utilizzata dall'interfaccia utenterange("A1").Formula =RAND()range("A1").Formulalocal =CASUALE()range("A1").FormulaLocal="=CASUALE()"
https://msdn.microsoft.com/en‐us/library/office/ff838238.aspx
PROPRIETA'
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
42Proprietà Tipo Descrizione
Interior Interior Restituisce l'oggetto che rappresenta gli aspetti interni di ogni cella dell'intervallorange("A1").Interior.Color =rgb(255,0,0) colora di rosso lo sfondo
Borders Borders Restituisce l'oggetto che rappresenta il bordo di ogni cella dell'intervallorange("A1").Borders.Color =rgb(0,255,0)range("A1").Borders(xlEdgeLeft).LineStyle=xlDashDotDotrange("b2").Borders(xlEdgeBottom).Weight =xlthick
METODI
Metodo Descrizione
ClearContents Pulisce le formule contenute all'interno dell'intervalloCells.clearcontents pulisce l'intero intervallo dalle formule
Clear Pulisce l'intero contenuto dell'intervallo.
Copy Copia il contenuto delle celle dell'intervalloRange("A2").Copy
PasteSpecial Incolla a seconda dell'opzione il contenuto della clipboard (del precedente copy)range("B6").PasteSpecial xlPasteAll copia tuttorange("B8").PasteSpecial xlPasteFormulas solo formularange("B10").PasteSpecial xlPasteValues solo il risultato
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
43
Metodo Descrizione
cut Equivalente del taglia. Utile per spostare il contenuto di un testorange("B2").cutActiveSheet.Paste Destination:=Range("A9")OppureActiveSheet.Paste Range("A9")
Sort Riordina il contenuto dell'intervallo.range("C2:C7").Sort Range("C2") ordino in modo crescenteApplication.ScreenUpdating = falserange("B2:D8").Sort
Key1:=Range("D2"), Order1:= xlDescending,Key2:=Range("C2"), Order2:=xlascending
Application.ScreenUpdating = True
Delete Elimina un intervallo di celle colmando lo spazio liberato con le celle ubicate in posizioni adiacenti a seconda dell'opzioni applicateRange("B:D").Delete elimina le colonne B, C e D
Insert Inserisce un intervallo di celle spostando quelle originali nelle colonne/righe adiacenti a seconda dell'opzione utilizzatarange("B:B").Insert Inserisce una nuova Colonna in corrispondenza della seconda
Docente: Marco Sechi ‐ Elementi di informatica e programmazione – Università degli studi di Brescia D.I.M.IDipa
rtim
ento di Ing
egne
ria M
eccanica e In
dustria
le –Co
rso di laurea
: Ing
egne
ria Gestio
nale
44
Metodo Descrizione
Select Seleziona l'intervallo di celle. Qualsiasi azione utente successiva verrà applicata alla selezione corrente.