34
Inform´ atica Macros en Excel - VBA Carmen Graciani D´ ıaz Luis Valencia Cabrera Dpto. Ciencias de la Computaci´ on e Inteligencia Artificial Universidad de Sevilla Luis Valencia Cabrera Inform´ atica

Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Embed Size (px)

Citation preview

Page 1: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

InformaticaMacros en Excel - VBA

Carmen Graciani DıazLuis Valencia Cabrera

Dpto. Ciencias de la Computacion e Inteligencia ArtificialUniversidad de Sevilla

Luis Valencia Cabrera Informatica

Page 2: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

¿VBA?

Nos adentramos en el mundo de las macros en Excel, en elcontexto de VBA. ¿Que es VBA?

Como se explica muy bien en este enlace introductorio, setrata de Visual Basic para Aplicaciones

Se trata de un lenguaje de programacion para el desarrolloVisual Basic integrado en aplicaciones como Excel u otras deOffice que proporcionen una biblioteca de objetos.

Nos permite automatizar todo tipo de tareas a traves demacros.

Luis Valencia Cabrera Informatica

Page 3: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

¿Solamente para Excel?

Con las macros en VBA no solamente podemos trabajar con Excel,sino tambien con cualquier otra aplicacion que proporcione unabiblioteca de objetos accesible:

Luis Valencia Cabrera Informatica

Page 4: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

¿Biblioteca de objetos?

La biblioteca de objetos, o modelo de objetos, permite accederdesde codigo a las distintas funcionalidades y caracterısticascon las que solemos trabajar a mano en Excel.

Estos elementos estan accesibles desde VBA, a traves denumerosos objetos que podemos consultar y manipular, ynumerosas funciones que podemos invocar.

Solamente en Excel, ya existen mas de 100 tipos de objetos quemanipular. A continuacion analizamos 4 de las colecciones deobjetos mas importantes.

Luis Valencia Cabrera Informatica

Page 5: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Biblioteca de objetos de Excel

Esta es la jerarquıa principal de objetos de Excel:

Estos elementos estan accesibles desde VBA

Luis Valencia Cabrera Informatica

Page 6: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

¿Macros Excel?

Vale, nos situamos en un contexto del lenguaje VBA empleadodentro de Excel, pero... ¿que es eso de una macro?

Es la unidad basica que nos permite automatizar tareas, uncomando al que dotamos de un codigo, y que podemos lanzarcuando lo solicitemos, de modo que ejecute la secuencia deinstrucciones de su codigo.

Una explicacion detallada se encuentra en este interesantetutorial de introduccion a las macros.

Como ya vimos en clase y recuerda el enlace, un primer pasopara generar nuestras macros puede ser la opcion de grabarmacro. Probemos para recordar y despues consultemos elcodigo generado. Recuerde que debe tener habilitada lapestana del desarrollador.

Luis Valencia Cabrera Informatica

Page 7: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Visualizar el codigo de VBA en Excel

Ok, he seguido paso a paso las instrucciones y grabado una macro.¿Como veo lo que he generado?

Mediante la combinacion de teclas Alt+F11 podra accedersiempre al editor de VBA de Excel.

Luis Valencia Cabrera Informatica

Page 8: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Un ejemplo basico de macro...

Sub: definicion de macro

Macro1: nombre macro

Select: seleccionarango/celda

ActiveCell: celdaseleccionada

FormulaR1C1: formula

Sub Macro1 ()

’ Macro1 Macro

Range("C2").Select

ActiveCell.FormulaR1C1 = "Ah"

Range("C3").Select

ActiveCell.FormulaR1C1 = "vale"

Range("C4").Select

End Sub

Luis Valencia Cabrera Informatica

Page 9: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Comenzando con macros de Excel

Mas informacion en: [exceltotal.com] [excel-avanzado.com]

Al margen de la grabacion automatica de macros, podemoscrearlas desde el Editor de Visual Basic, accesible desde lapestana del desarrollador.

Una vez ahı, podemos proceder a crear un modulo quecontenga nuestras macros, y crear una primera macro:

Luis Valencia Cabrera Informatica

Page 10: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Detalles y buenas practicas

Conviene comentar el codigo que vamos escribiendo.

Debemos distinguir entre propiedades y metodos, es decir,entre elementos que identifican el estado y las acciones sobrelos mismos.

Este enlace ilustra muy bien una breve introduccion al uso deelementos basicos de ambos tipos en una hoja Excel.

Podemos acceder y manipular los elementos basicos de labiblioteca de objetos

Mas informacion sobre: [hojas y libros] [el objeto Application]

Conforme comience a escribir codigo, ira cometiendo errores.Puede tratar de corregirlos a traves de la depuracion, para loque dispone de algunas opciones interesantes

Luis Valencia Cabrera Informatica

Page 11: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

El lenguaje VBA (I)Elementos basicos

Variables y tipos. (Ver referencia de los tipos)

Cadenas (texto) y funciones sobre ellas

Fechas y horas

Arrays (listas unidimensionales de elementos)

Funciones basicas

Mas sobre funciones definidas por el usuario

Devolucion de errores

Uso del With

Luis Valencia Cabrera Informatica

Page 13: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

El lenguaje VBA (II)Instrucciones repetitivas

Instrucciones repetitivas

For-To-Next [Mucho mas]

For-Each

Acceso a celdas en bucle

Do-While

Luis Valencia Cabrera Informatica

Page 14: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Asignacion de formulas

No solamente se pueden cambiar valores y formatos de lasceldas, tambien asignar formulas a las mismas medianteFormula o FormulaR1C1.

En las formulas podemos emplear funciones, mediante sunombre en ingles.

Correspondencia entre funciones en espanol y en ingles.

Otra alternativa es asignar una funcion nombrada como en lainstalacion local de nuestro Excel, mediante FormulaLocal oFormulaR1C1Local, como se detalla aquı.

Range ( ”A5” ) . Formula = ”=AVG(A4 , A10 ) ”Range ( ”A5” ) . FormulaR1C1 = ”=AVG( R4C1 , R10C1 ) ”S e p a r a d o r = A p p l i c a t i o n . I n t e r n a t i o n a l ( x l L i s t S e p a r a t o r )Range ( ”A5” ) . F o rm u la L oc a l = ”=PROMEDIO(A4” & S e p a r a d o r & ”A10 ) ”Range ( ”A5” ) . FormulaR1C1Local = ”=PROMEDIO( F4C1” & S e p a r a d o r & ”F10C1 ) ”

Luis Valencia Cabrera Informatica

Page 15: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

VBA en Excel y controles

Controles ActiveX

Hemos trabajado con controles de formulario

Los controles ActiveX son posteriores, mas modernos, ypermiten controlar muchos mas comportamientos

Se trabaja con ellos mediante el Modo Diseno

Se tiene acceso a sus propiedades

Aquı tiene mas informacion sobre controles ActiveX

Luis Valencia Cabrera Informatica

Page 17: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de texto

Vamos a crear un nuevo libro, ControlesActiveX.xlsm e incluirun cuadro de texto, indicando su nombre (propiedad (Name)) paraacceder desde codigo. Por ejemplo: TxbNombre.

Su valor por defecto (propiedad Value) es vacıo.

Luis Valencia Cabrera Informatica

Page 18: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de texto

Creamos ahora una macro para inicializar el cuadro:

Luis Valencia Cabrera Informatica

Page 19: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de texto

Sub I n i c i a l i z a r C u a d r o T e x t o ( )

’ Dentro d e l b l o q u e With , l o que e s c r i b a m o s t r a s e l punto ( . )’ e s como s i a n t e p u s i e r a m o s Worksheets (” Hoja1 ”) a l .With Worksheets ( ” Hoja1 ” )

’ M o d i f i c a r e l v a l o r d e l cuadro de t e x t o ( e l t e x t o v i s i b l e ). TxbNombre . Value = ” L u i s ”

’ L e e r e l v a l o r d e l cuadro de t e x t o y a l m a c e n a r l o en una c e l d a. Range ( ”H6” ) = . TxbNombre . Value

End With

End Sub

Luis Valencia Cabrera Informatica

Page 20: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de lista

Luis Valencia Cabrera Informatica

Page 21: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de texto

Ademas de un boton para lanzar una macro, podemos crear unnuevo cuadro de texto como anteriormente con TxbNombre:

Nombre: TxbContinente

Value: vacıo

LinkedCell: B12

(al actualizar TxbContinente,se actualizara B12)

Luis Valencia Cabrera Informatica

Page 22: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Boton

A continuacion, incluimos el boton para anadir elementos delcuadro de texto a la lista:

Luis Valencia Cabrera Informatica

Page 23: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de lista

Una vez incluidas las propiedades del boton, pulsamos doble click yaparece la macro, en la que podemos anadir el codigo:

P r i v a t e Sub B t n A n a d i r C o n t i n e n t e C l i c k ( )’ Vamos a a n a d i r e l c o n t i n e n t e i n t r o d u c i d o en e l cuadro de t e x t o’ en e l cuadro de l i s t a

With Worksheets ( ” Hoja1 ” )

’ E l c o n t e n i d o d e l cuadro de t e x t o e s Worksheets (” Hoja1 ”) . TxbCont inente . Value’ Anadimos a l cuadro de l i s t a con Worksheets (” Hoja1 ”) . L s b C o n t i n e n t e s . AddItem

. L s b C o n t i n e n t e s . AddItem . TxbCont inente . Value

’Como sabemos , a l e s t a r d e n t r o d e l With podemos o m i t i r Worksheets (” Hoja1 ”) ,’ s o l a m e n t e e s c r i b i m o s e l . y l o que va a c o n t i n u a c i o n’ ( o jo , hay un e s p a c i o t r a s e l AddItem )

End WithEnd Sub

Luis Valencia Cabrera Informatica

Page 24: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de lista

Tambien podemos hacer que la lista sea poblada desde un rango:

ListFillRange indica el rango

En este caso O2:O6

MultiSelect establece si podemosseleccionar un valor de la lista omas.

0 - fmMultiSelectSingle

permite seleccionar un solo valor.

Luis Valencia Cabrera Informatica

Page 25: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de lista

Se puede emplear nombre de rango, y cambiar al modo de seleccionmultiple:

ListFillRange indica el rango

En este caso Comunidades

Opciones sel. multiple:

0-fmMultiSelectMulti

0-fmMultiSelectExtended

En este enlace se detalla la diferencia entre las dos opciones anteriores.

Luis Valencia Cabrera Informatica

Page 26: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de lista

Podemos colocar un boton que nos devuelva un mensaje con los valoresseleccionados:

Luis Valencia Cabrera Informatica

Page 27: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Cuadro de lista

P r i v a t e Sub B t n M o s t r a r S e l e c c i o n C l i c k ( )’ Vamos r e c o r r i e n d o cada v a l o r d e l cuadro de l i s t a LsbComunidades’ Por cada v a l o r s e l e c c i o n a d o ( LsbComunidades . S e l e c t e d ( p o s L i s t a ) ) ,’ vamos a na d ie nd o e l e l emento ( LsbComunidades . L i s t ( p o s L i s t a ) ) a l mensaje

’ En p o s L i s t a i r e m o s almacenando l a p o s i c i o n de l a l i s t a que r e c o r r e m o sDim p o s L i s t a As Long’ En mensaje vamos c o n s t r u y e n d o e l mensaje que f i n a l m e n t e mostramosDim mensaje As S t r i n g

’ Dentro de l a l i s t a de comunidades :With LsbComunidades

’ Para cada p o s i c i o n de l a l i s t a , p o s L i s t aFor p o s L i s t a = 0 To . L i s t C o u n t − 1

’ S i e s a p o s i c i o n de l a l i s t a f u e s e l e c c i o n a d a :I f . S e l e c t e d ( p o s L i s t a ) Then

’ Entonces anadimos a l mensaje a c t u a l e l e l emento s e l e c i o n a d omensaje = mensaje & . L i s t ( p o s L i s t a ) & vbCrLf’ vbCrLf va a na d i en d o un s a l t o de l i n e a t r a s cada o p c i o n s e l e c c i o n a d a

End I fNext p o s L i s t a

End With

’ S i e l mensaje t i e n e l o n g i t u d c e r o i n d i c a m o s que no hay nada s e l e c c i o n a d oI f Len ( mensaje ) = 0 Then

mensaje = ”No hay e l e m e n t o s s e l e c c i o n a d o s ”End I f

’ F ina lmente , mostramos e l mensaje emergenteMsgBox mensaje

End Sub

Luis Valencia Cabrera Informatica

Page 28: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Boton de opcion

Podemos incorporar botones de opcion, pertenecientes a grupos:

Ası, los botones OpbMujer y OpbHombre pertenecen al grupo sexo, demodo que al pulsar en mujer se desmarca el de hombre, y viceversa.

Luis Valencia Cabrera Informatica

Page 29: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Checkbox (casilla)

Podemos incorporar casillas (mas conocidos como checkbox),pertenecientes a grupos:

El comportamiento es similar al anterior, y en ambos casos el Value decada control devuelve VERDADERO o FALSO.

Luis Valencia Cabrera Informatica

Page 30: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Boton de opcion ycheckbox

P r i v a t e Sub B t n A n a l i z a r O p c i o n e s C l i c k ( )

’ Colocamos en l a c e l d a F27 e l v a l o r VERDADERO o FALSO ,’ segun s i s e ha marcado o no e l checkbox ChbMedia4Range ( ”F27” ) . Value = ChbMedia4 . Value

’ Se muestra un mensaje en f u n c i o n de s i l a o p c i o n de’ Sexo s e l e c c i o n a d a e s Mujer u HombreI f OpbMujer . Value = True ThenMsgBox ( ”Has s e l e c c i o n a d o l a o p c i o n Mujer ” )

E l s e I f OpbHombre . Value = True ThenMsgBox ( ”Has s e l e c c i o n a d o l a o p c i o n Hombre” )

End I f

End Sub

Luis Valencia Cabrera Informatica

Page 31: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Lista desplegable

Podemos incorporar listas desplegables (combo boxes):

Las propiedades son similares a las vistas para controles anteriores,cogiendo los datos de la lista de un nombre de rango y vinculandose suseleccion a una celda.

Luis Valencia Cabrera Informatica

Page 32: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Propiedades hoja

Si estamos consultando propiedades de un control y pinchamos enla hoja, pasamos a ver o modificar las propiedades de la misma.Por ejemplo, podemos cambiar la propiedad del nombre de la hoja,pasando de Hoja2 a HojaLote:

Luis Valencia Cabrera Informatica

Page 33: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Trabajando con controles activeX - Evento cambiar opcion

Al hacer doble-click en modo diseno sobre la lista desplegable, senavega hasta el codigo del evento de cambiar la opcionseleccionada, en el que podemos incluir las acciones que queramos:

P r i v a t e Sub CmbComunidades Change ( )

’ Al cambiar l a o p c i o n s e l e c c i o n a d a , s e muestra un mensaje’ mostrando e l nuevo v a l o r t r a s e l cambioMsgBox HojaLote . CmbComunidades . Value

End Sub

Luis Valencia Cabrera Informatica

Page 34: Informática - Macros en Excel - VBA file>Solamente para Excel? Con las macros en VBA no solamente podemos trabajar con Excel, sino tambi en con cualquier otra aplicaci on que proporcione

Comenzando a trabajar con Userforms

Para familiarizarse con muchas practicas habituales con VBA yUserforms, es conveniente no partir de cero.

Puede encontrar una introduccion en este enlace. Mas informacionen las entradas de blog: [entrada 1] [entrada 2] [Propiedades]Conviene practicar con ejemplos paso a paso:

Algunos userforms de ejemplo en excel-avanzado.com

Mas ejemplos en este documento, a partir del ejemplo 5:

Desarrollo de aplicaciones en Microsoft Excel. 12 casospracticos resueltos paso a paso

Muchos mas ejemplos de userforms

Agradecimientos a exceltotal.com, excel-avanzado.com y laUniversidad de Cartagena.

Luis Valencia Cabrera Informatica