vba

55
Introducció a Visual Basic for Applications Jaime Rodriguez Claver [email protected] Institut de Recerca en Enginyeria Informàtica - IRI

Upload: angami13

Post on 25-Jun-2015

124 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Vba

Introducció a Visual Basic for ApplicationsJaime Rodriguez [email protected]

Institut de Recerca en Enginyeria Informàtica - IRI

Page 2: Vba

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

Page 3: Vba

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

Page 4: Vba

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

Page 5: Vba

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

Page 6: Vba

Com entrar-hi

Afegir pestanya Programador

Entorn de desenvolupament

Introducció a Visual Basic for Applications

Page 7: Vba

Com entrar-hi

Seleccionar Visual Basic

Entorn de desenvolupament

o combinació de Tecles

Alt + F11

Introducció a Visual Basic for Applications

Page 8: Vba

En ell editarem les nostres Macros mitjançant programació en VBA

Entorn de desenvolupament

Introducció a Visual Basic for Applications

Page 9: Vba

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

Page 10: Vba

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

Page 11: Vba

La nostra primera Macro (gravada)

Introducció a Visual Basic for Applications

Page 12: Vba

La nostra primera Macro (gravada)A l’entorn de programació hem generat el següent codi

Introducció a Visual Basic for Applications

Page 13: Vba

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

Page 14: Vba

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

Page 15: Vba

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

Page 16: Vba

Menú de configuració de la protecció (o confiança) contra Macros

Macro segures

Introducció a Visual Basic for Applications

Page 17: Vba

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

Page 18: Vba

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

Page 19: Vba

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

Page 20: Vba

Un programa està composat per

Procediments

Instruccions

Crides

Variables

Dades

Sintaxis

Introducció a Visual Basic for Applications

Page 21: Vba

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

Page 22: Vba

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

Page 23: Vba

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

Page 24: Vba

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

Page 25: Vba

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

Page 26: Vba

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

Page 27: Vba

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

Page 28: Vba

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

Page 29: Vba

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

Page 30: Vba

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

Page 31: Vba

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

Page 32: Vba

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

Page 33: Vba

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

Page 34: Vba

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

Page 35: Vba

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

Page 36: Vba

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

Page 37: Vba

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

Page 38: Vba

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

Page 39: Vba

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

Page 40: Vba

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

Page 41: Vba

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

Page 42: Vba

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

Page 43: Vba

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

Page 44: Vba

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

Page 45: Vba

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

Page 46: Vba

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

Page 47: Vba

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

Page 48: Vba

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

Page 49: Vba

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

Page 50: Vba

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

Page 51: Vba

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

Page 52: Vba

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

Page 53: Vba

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

Page 54: Vba

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

Page 55: Vba

Grà[email protected]

Barcelona Activa, 2012

Introducció a Visual Basic for Applications