1. Introducció a Visual Basic for Applications
Jaime Rodriguez Claver
jaime.rodriguez@iri.cat
Institut de Recerca en Enginyeria Informàtica - IRI
2. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
3. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
4. Introducció a Visual Basic for Applications
Visual Basic for Applications
Què és?
Llenguatge de programació integrat en les aplicacions de Microsoft Office
Basat en Visual Basic
Què ens permet?
Programar Macros
Desenvolupar aplicacions d’escriptori basades en Office
Per a què?
Ampliar funcionalitats
Automatitzar tasques quotidianes
5. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
6. Introducció a Visual Basic for Applications
Entorn de desenvolupament
Com entrar-hi
Afegir pestanya Programador
7. Introducció a Visual Basic for Applications
Entorn de desenvolupament
Com entrar-hi
Seleccionar Visual Basic
o combinació de Tecles
Alt + F11
8. Introducció a Visual Basic for Applications
Entorn de desenvolupament
En ell editarem les nostres Macros mitjançant programació en VBA
9. Introducció a Visual Basic for Applications
Entorn de desenvolupament
Barra de menús i eines
Opcions de configuració, importació/exportació, eines d’edició, depuració i execució,...
Explorador de projectes
Accés i edició dels projectes i dels seus objectes
Finestra de propietats
Configuració i edició dels objectes, formularis i controls
Àrea de treball
Generació de codi
10. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
12. Introducció a Visual Basic for Applications
La nostra primera Macro (gravada)
A l’entorn de programació hem generat el següent codi
13. Introducció a Visual Basic for Applications
La nostra primera Macro (gravada)
Guardarem l’arxiu amb la macro generada però, necessitarà un format compatible:
Microsoft Word
.docm
Microsoft Excel
.xlsm
Extensió “habilitada per a Macros”
14. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
15. Introducció a Visual Basic for Applications
Macro segures
El codi VBA és prou potent com per provocar un desgavell al nostra ordinador
Què podem fer?
Aplicar una política de seguretat adequada
Quines possibilitats hi ha?
Deshabilitar les Macros
Preguntar cada vegada
Habilitar només les Macros de confiança
Habilitar-les totes
16. Introducció a Visual Basic for Applications
Macro segures
Menú de configuració de la protecció (o confiança) contra Macros
17. Introducció a Visual Basic for Applications
Macro segures
Crear un Certificat Digital
Identifiquem qui a creat aquelles Macros
Podrem confiar en les Macros firmades per certificats de confiança
18. Introducció a Visual Basic for Applications
Macro segures
Firmar un document amb un Certificat Digital
Identificarem aquest document amb Macros com de confiança
El nostre Office no ens deshabilitarà les Macros d’aquest document
19. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
20. Introducció a Visual Basic for Applications
Sintaxis
Un programa està composat per
Procediments
Instruccions
Crides
Variables
Dades
21. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
•
Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
22. Introducció a Visual Basic for Applications
Procediments
Els procediments estan composats per
Seqüència d’instruccions ..
.. definides amb una capçalera ..
.. que les identifica amb un nom
N’hi ha de dos tipus
Subrutines
Funcions
23. Introducció a Visual Basic for Applications
Procediments
Subrutines
Les instruccions estan empaquetades entre les clàusules
Sub nom_subrutina([llistat_de_paràmetres])
[seqüència d’instruccions]
End Sub
Poden contenir paràmetres
No retornen cap informació
Sub avis(missatge As String)
MsgBox(missatge)
End Sub
24. Introducció a Visual Basic for Applications
Procediments
Funcions
Les instruccions estan empaquetades entre les clàusules
Function nom_subrutina([llistat_de_paràmetres])
_[parametre_retornat]
[seqüència d’instruccions]
End Function
Poden contenir paràmetres
Poden retornar informació
Function suma(x As Integer, y As Integer) As Integer
suma = x + y
End Function
Retornarà el resultat de la suma dels valors corresponents a x i y
25. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
•
Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
26. Introducció a Visual Basic for Applications
Variables i Assignacions
Variables
Contenen informació necessària per el programa
Per exemple, extraccions de la realitat (nom, edat, alçada,...)
El seu contingut pot variar en el transcurs del programa
Definides per cert format, depenen del tipus d’informació que continguin
String
Text
Integer
Valors enters
Double
Valors decimals
Boolean
True (cert) o False (fals)
Variant Qualsevol dels valors anteriors
27. Introducció a Visual Basic for Applications
Variables i Assignacions
Assignacions
Introduïm/Modifiquem un valor a una variable
Dim nom As String
nom = “Mireia”
Dim edat As Integer
edat = 22
Dim altura As Double
altura = 1.64
Dim casada As Boolean
casada = False
Declaració de la variable del tipus de text
Assignació del text Mireia a la variable nom
28. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
•
Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
29. Introducció a Visual Basic for Applications
Expressions
Aritmètiques
El resultat serà un valor numèric
Dim edat, x, y As Integer
..
edat = (x + 3*(y -1)) / 2
Dim altura, x, y As Double
..
altura = 1 + ((x Mod 10) / 10) + ((y Mod 10) * 0.01)
30. Introducció a Visual Basic for Applications
Expressions
Lògiques
El resultat serà un valor True/False (cert o fals)
Dim solter, casat, divorciat, vidu As Boolean
..
solter = Not (casat Or divorciat Or vidu)
Dim compra, festiu As Double
Dim diners, preu As Double
..
compra = festiu And diners >= preu
Dim es_igual As Double
Dim paraula1, paraula2 As String
..
es_igual = paraula1 = paraula2
31. Introducció a Visual Basic for Applications
Expressions
Concatenadores
El resultat serà un nou valor de text
Dim vocals As String
..
vocals = “aei” & “ou”
Dim subjecte, nom As String
..
subjecte = “En “ & nom
Dim oracio, subjecte, predicat As String
..
oracio = subjecte & predicat
32. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
•
Sentències condicionals
• Sentències iteratives
• Crides
• Control d’errors
33. Introducció a Visual Basic for Applications
Sentències Condicionals
Permeten en funció d’una condició seguir un camí o altre
La condició ha d’avaluar-se en True/False (cert o fals)
variable Booleana
expressió lògica
informació Booleana retornada d’una funció
34. Introducció a Visual Basic for Applications
Sentències Condicionals
IF .. THEN ..
Només si es compleix la condició s’executen la seqüència d’instruccions
If condicio Then
[instruccions]
End If
If edat >= 65 Then
jubilat = True
End If
If edat < 25 And aturat Then
inem = inem + 1
atur_juvenil = atur_juvenil + 1
End If
Sinó es complís la condició, no s'executarien les instruccions
35. Introducció a Visual Basic for Applications
Sentències Condicionals
IF .. THEN .. ELSE
Depenen si es compleix la condició s’executen una o altre seqüència d’instruccions
If condicio Then
[instruccions]
Else
[instruccions_alternatives]
End If
If edat >= 65 Then
jubilat = True
Else
jubilat = False
End If
Sinó es complís la condició, s'executarien les instruccions alternatives
36. Introducció a Visual Basic for Applications
Sentències Condicionals
IIF
Model simplificat per assignacions depenen de la condició
variable = IIf(condició, valor_si_cert, valor_si_fals)
jubilat = IIf(edat >= 65, True, False)
persona = IIf(edat < 90, "adolescent", "adult")
posicio = IIf(primer, 1, 2)
posicio = IIf(Not primer, 1, 2)
valor = IIf(opcio1 And opcio2, 3.14, 0.2)
Si es complís la condició, la variable agafarà el primer valor, sinó el segon.
37. Introducció a Visual Basic for Applications
Sentències Condicionals
Condicionals Enllaçats
Podem enllaçar-los i necessitem més d’una possible opció
If condicio Then
[instruccions]
Else If
[instruccions_alternatives1]
..
Else
[instruccions_alternativesN]
End If
If angle < 90 Then
tipus = “agut”
Else If angle > 90 Then
tipus = “obtús”
Else
tipus = “recte”
End If
38. Introducció a Visual Basic for Applications
Sentències Condicionals
SELECT CASE
Per avaluar diferents condicions d’una mateixa variable pot ser-nos menys engorrós
Select Case variable
Case cas1:
[instruccions_cas_1]
..
Case casN:
[instruccions_cas_N]
End Select
Select Case opcio
Case 1:
menu = “sopa i peix”
Case 2:
menu = “pasta i bistec”
Case 3:
menu = “amanida i truita”
End Select
39. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
•
Sentències iteratives
• Crides
• Control d’errors
40. Introducció a Visual Basic for Applications
Sentències Iteratives
Permeten en funció d’una condició repetir un procés
La condició ha d’avaluar-se en True/False (cert o fals)
variable Booleana
expressió lògica
informació Booleana retornada d’una funció
41. Introducció a Visual Basic for Applications
Sentències Iteratives
FOR .. NEXT
La seqüència d’instruccions s’executa un nombre determinat de vegades
For condicio_inicial To condicio_final
[instruccions]
Next
For edat = 0 To 25
MsgBox(“En Marcel té “ & Str(edat) & “ anys”)
Next
For i = 1 To 10
anys = anys + 1
dies_febrer = IIf(any Mod 4 = 0, 29, 28)
Next i
En el moment que deixa de complir-se la condició, ja no s'executen les
instruccions
42. Introducció a Visual Basic for Applications
Sentències Iteratives
FOR EACH .. NEXT
La seqüència d’instruccions s’executa per cada element de la llista
For element To llistat_elements
[instruccions]
Next element
For Each nom In llista_noms
MsgBox(“Bon dia “ & nom)
Next
For numero In llista_numeros
If numero = numero_a_buscar Then trobat = True
Next numero
Quan ja hem visitat tots els elements, deixen d'executar-se les instruccions
43. Introducció a Visual Basic for Applications
Sentències Iteratives
WHILE .. WEND
La seqüència d’instruccions s’executa mentre es compleixi la condició
While condicio
[instruccions]
Wend
While Not trobat And i < 25
If alumne[i] = “Mercè” Then
i = i + 1
Wend
trobat = True
While aleatori <> 5
aleatori = Int((maxim –minim + 1) * Rnd + minim)
c = c + 1
Wend
En el moment que deixa de complir-se la condició, ja no s'executen les
instruccions
44. Introducció a Visual Basic for Applications
Sentències Iteratives
DO [While|Until] .. LOOP
La seqüència d’instruccions s’executa:
mentre es compleixi la condició (While)
fins que es compleixi la condició (Until)
Do [While|Until] condicio
[instruccions]
loop
Do While aleatori <> 5
aleatori = Int((maxim –minim + 1) * Rnd + minim)
c = c + 1
Loop
Do Until aleatori = 5
aleatori = Int((maxim –minim + 1) * Rnd + minim)
c = c + 1
Loop
Dos sentències iteratives que fan el mateix, observeu les diferències
45. Introducció a Visual Basic for Applications
Sentències Iteratives
DO .. LOOP [While|Until]
La seqüència d’instruccions s’executa i posteriorment comprova la condició:
si se segueix complint, segueix (While)
fins que no es compleixi segueix (Until)
Do
[instruccions]
loop [While|Until] condicio
Do
aleatori = Int((maxim –minim + 1) * Rnd + minim)
c = c + 1
Loop While aleatori <> 5
Do
aleatori = Int((maxim –minim + 1) * Rnd + minim)
c = c + 1
Loop Until aleatori = 5
Ens assegurem així que les instruccions s’executin almenys una vegada
46. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
•
Crides
• Control d’errors
47. Introducció a Visual Basic for Applications
Crides
Els procediments que haurem creat en el nostre codi s’executaran quan els invoquem.
Aquest procés d’invocació l’anomenem crida.
Dos tipus:
Crides de Subrutines o Funcions sense paràmetre de retorn
Call nom_procediment([parametre1, .., parametreN])
Crides de Funcions amb paràmetre de retorn
Resultat = nom_funcio([parametre1, .., parametreN])
48. Introducció a Visual Basic for Applications
Crides
Sub benvinguda(nom As String)
MsgBox ("Hola " & nom)
End Sub
Function avui_som() As String
avui_som = Date
End Function
Function despedida()
MsgBox ("Fins aviat")
End Function
Si executem..
Call benvinguda("Muriel")
data = avui_som()
MsgBox ("La data d'avui és " & data)
Call despedida
49. Introducció a Visual Basic for Applications
Crides
Sub benvinguda(nom As String)
MsgBox ("Hola " & nom)
End Sub
Function avui_som() As String
avui_som = Date
End Function
Function despedida()
MsgBox ("Fins aviat")
End Function
Si executem..
Call benvinguda("Muriel")
MsgBox ("La data d'avui és " & avui_som())
Call despedida
50. Introducció a Visual Basic for Applications
Programa
Visual Basic for Applications
Entorn de desenvolupament
La nostra primera Macro (gravada)
Macros segures
Sintaxis
• Procediments
• Variables i assignacions
• Expressions
• Sentències condicionals
• Sentències iteratives
• Crides
•
Control d’errors
51. Introducció a Visual Basic for Applications
Control d’Errors
Ens podem trobar que el nostre codi provoqui un error d’execució
Què passarà?
S’aturarà l’execució del programa
Mostrarà un missatge d’error
Com podem evitar-ho?
Preveient totes les possibles execucions..
.. i l’ús d’instruccions de gestió d’errors
52. Introducció a Visual Basic for Applications
Control d’Errors
Quan acostumen a sorgir errors d’execució?
Contexts d’execució no previstos pel programador (accés a objects buit, que no
existeix, o que ja s’han eliminat, divisions entre 0, ...)
Accés a elements externs que ens provoquen l’error (bases de dades, altres
arxius, ...)
L’usuari no introdueix informació o ho fa en un format no previst, ...
53. Introducció a Visual Basic for Applications
Control d’Errors
GoTo
Salta fins l’etiqueta especificada (no executa la instrucció ni les que hi ha fins
l’etiqueta)
On Error GoTo etiqueta
On Error GoTo error
x = y / z
y = 2
...
error:
MsgBox(“Divisió entre 0?”)
Si falla x = y / z la instrucció y = 2 NO s’executa
54. Introducció a Visual Basic for Applications
Control d’Errors
Resume Next
Salta només la instrucció que falla
On Error Resume Next
On Error Resume error
x = y / z
z = 2
Si falla x = y / z la instrucció y = 2 SI s’executa
55. Introducció a Visual Basic for Applications
Gràcies
jaime.rodriguez@iri.cat
Barcelona Activa, 2012