vba
TRANSCRIPT
Introducció a Visual Basic for ApplicationsJaime Rodriguez [email protected]
Institut de Recerca en Enginyeria Informàtica - IRI
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
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
Introducció a 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
Visual Basic for Applications
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
Introducció a Visual Basic for Applications
Com entrar-hi
Afegir pestanya Programador
Entorn de desenvolupament
Introducció a Visual Basic for Applications
Com entrar-hi
Seleccionar Visual Basic
Entorn de desenvolupament
o combinació de Tecles
Alt + F11
Introducció a Visual Basic for Applications
En ell editarem les nostres Macros mitjançant programació en VBA
Entorn de desenvolupament
Introducció a Visual Basic for Applications
Barra de menús i einesOpcions de configuració, importació/exportació, eines d’edició, depuració i execució,...
Explorador de projectesAccés i edició dels projectes i dels seus objectes
Finestra de propietatsConfiguració i edició dels objectes, formularis i controls
Àrea de treballGeneració de codi
Entorn de desenvolupament
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
Introducció a Visual Basic for Applications
La nostra primera Macro (gravada)
Introducció a Visual Basic for Applications
La nostra primera Macro (gravada)A l’entorn de programació hem generat el següent codi
Introducció a Visual Basic for Applications
Guardarem l’arxiu amb la macro generada però, necessitarà un format compatible:
Microsoft Word.docm
Microsoft Excel.xlsm
Extensió “habilitada per a Macros”
La nostra primera Macro (gravada)
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
Introducció a Visual Basic for Applications
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 MacrosPreguntar cada vegadaHabilitar només les Macros de confiançaHabilitar-les totes
Macro segures
Introducció a Visual Basic for Applications
Menú de configuració de la protecció (o confiança) contra Macros
Macro segures
Introducció a Visual Basic for Applications
Crear un Certificat Digital Identifiquem qui a creat aquelles Macros Podrem confiar en les Macros firmades per certificats de confiança
Macro segures
Introducció a Visual Basic for Applications
Macro seguresFirmar 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
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
Introducció a Visual Basic for Applications
Un programa està composat per
Procediments
Instruccions
Crides
Variables
Dades
Sintaxis
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
Introducció a Visual Basic for Applications
Els procediments estan composats per
Seqüència d’instruccions ..
.. definides amb una capçalera ..
.. que les identifica amb un nom
Procediments
N’hi ha de dos tipus
Subrutines
Funcions
Introducció a Visual Basic for Applications
Subrutines
Les instruccions estan empaquetades entre les clàusulesSub 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
Procediments
Introducció a Visual Basic for Applications
Funcions
Les instruccions estan empaquetades entre les clàusulesFunction 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 Integersuma = x + y
End Function
Retornarà el resultat de la suma dels valors corresponents a x i y
Procediments
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
Introducció a Visual Basic for Applications
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
Variables i Assignacions
String TextInteger Valors entersDouble Valors decimalsBoolean True (cert) o False (fals)Variant Qualsevol dels valors anteriors
Introducció a Visual Basic for Applications
Assignacions
Introduïm/Modifiquem un valor a una variable
Dim nom As String Declaració de la variable del tipus de textnom = “Mireia” Assignació del text Mireia a la variable nom
Dim edat As Integeredat = 22
Dim altura As Doublealtura = 1.64
Dim casada As Booleancasada = False
Variables i Assignacions
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
Introducció a Visual Basic for Applications
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)
Expressions
Introducció a Visual Basic for Applications
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 DoubleDim diners, preu As Double..compra = festiu And diners >= preu
Dim es_igual As DoubleDim paraula1, paraula2 As String..es_igual = paraula1 = paraula2
Expressions
Introducció a Visual Basic for Applications
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
Expressions
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
Introducció a Visual Basic for Applications
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ó
Sentències Condicionals
Introducció a Visual Basic for Applications
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 Thenjubilat = True
End If
If edat < 25 And aturat Theninem = inem + 1atur_juvenil = atur_juvenil + 1
End If
Sinó es complís la condició, no s'executarien les instruccions
Sentències Condicionals
Introducció a Visual Basic for Applications
IF .. THEN .. ELSEDepenen 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 Thenjubilat = True
Elsejubilat = False
End If
Sinó es complís la condició, s'executarien les instruccions alternatives
Sentències Condicionals
Introducció a Visual Basic for Applications
IIFModel 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.
Sentències Condicionals
Introducció a Visual Basic for Applications
Condicionals EnllaçatsPodem 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 Thentipus = “agut”
Else If angle > 90 Thentipus = “obtús”
Elsetipus = “recte”
End If
Sentències Condicionals
Introducció a Visual Basic for Applications
SELECT CASEPer avaluar diferents condicions d’una mateixa variable pot ser-nos menys engorrós
Select Case variableCase cas1:
[instruccions_cas_1]..Case casN:
[instruccions_cas_N]End Select
Select Case opcioCase 1:
menu = “sopa i peix”Case 2:
menu = “pasta i bistec”Case 3:
menu = “amanida i truita”End Select
Sentències Condicionals
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
Introducció a Visual Basic for Applications
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ó
Introducció a Visual Basic for Applications
Sentències Iteratives
FOR .. NEXTLa seqüència d’instruccions s’executa un nombre determinat de vegades
For condicio_inicial To condicio_final [instruccions]
Next
For edat = 0 To 25MsgBox(“En Marcel té “ & Str(edat) & “ anys”)
Next
For i = 1 To 10anys = anys + 1dies_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
Sentències Iteratives
Introducció a Visual Basic for Applications
FOR EACH .. NEXTLa 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_nomsMsgBox(“Bon dia “ & nom)
Next
For numero In llista_numerosIf numero = numero_a_buscar Then trobat = True
Next numero
Quan ja hem visitat tots els elements, deixen d'executar-se les instruccions
Sentències Iteratives
Introducció a Visual Basic for Applications
WHILE .. WENDLa seqüència d’instruccions s’executa mentre es compleixi la condició
While condicio[instruccions]
Wend
While Not trobat And i < 25If alumne[i] = “Mercè” Then trobat = Truei = i + 1
Wend
While aleatori <> 5aleatori = 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
Sentències Iteratives
Introducció a Visual Basic for Applications
DO [While|Until] .. LOOPLa 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 <> 5aleatori = Int((maxim –minim + 1) * Rnd + minim)c = c + 1
Loop
Do Until aleatori = 5aleatori = Int((maxim –minim + 1) * Rnd + minim)c = c + 1
Loop
Dos sentències iteratives que fan el mateix, observeu les diferències
Sentències Iteratives
Introducció a Visual Basic for Applications
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
Sentències Iteratives
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
Introducció a Visual Basic for Applications
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])
Crides
Introducció a Visual Basic for Applications
Sub benvinguda(nom As String) MsgBox ("Hola " & nom)End Sub
Function avui_som() As String avui_som = DateEnd 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
Crides
Introducció a Visual Basic for Applications
Sub benvinguda(nom As String) MsgBox ("Hola " & nom)End Sub
Function avui_som() As String avui_som = DateEnd Function
Function despedida() MsgBox ("Fins aviat")End Function
Si executem..
Call benvinguda("Muriel")MsgBox ("La data d'avui és " & avui_som())Call despedida
Crides
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
Introducció a Visual Basic for Applications
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
Control d’Errors
Introducció a Visual Basic for Applications
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, ...
Control d’Errors
Introducció a Visual Basic for Applications
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
Control d’Errors
Introducció a Visual Basic for Applications
Resume NextSalta 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
Control d’Errors
Introducció a Visual Basic for Applications