EXCEL Con VISUAL BASIC Para Aplicaciones

download EXCEL Con VISUAL BASIC Para Aplicaciones

of 87

Transcript of EXCEL Con VISUAL BASIC Para Aplicaciones

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    1/87

    Excel con VBA

    Excel con Visual Basic Para Aplicaciones (VBA)

    1

    Excel con VBA

    Parte 1:

    Caractersticas Generales

    2

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    2/87

    Excel con VBA

    INTRODUCCIN

    Esencialmente la programacin de Excel se reduce a lamanipulacin de objetos (mediante la escritura de instrucciones en

    un lenguaje que Excel puede entender), mediante el lenguajeVBA.

    VBA est pensado como un lenguaje de secuencia de comandos deaplicacin de Microsoft comn y ahora est incluido en lasaplicaciones de Office 2000 (e incluso en aplicaciones de otrosfabricantes). Por consiguiente, al dominar VBA usando Excel se podr entrar directamente en la escritura de macros para otrosproductos de Microsoft. Mejor an, se pueden generar solucionescompletas que usan opciones a travs de varias aplicaciones.

    3

    Excel con VBA

    INTRODUCCIN

    El secreto de usar VBA con otras aplicaciones reside en entenderel modelos de objetospara cada aplicacin.

    VBA simplemente manipula objetos, y cada producto (Excel,Word, Access, PowerPoint y dems) posee un modelo de objetonico propio.

    Por ejemplo Excel expone varios objetos de anlisis de datos muy potentes como las hojas de clculo, grficos, tablas dinmicas,escenarios y numerosas funciones matemticas, financieras ytemas generales. Con VBA se puede trabajar con estos objetos ydisear procedimientos automatizados.

    4

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    3/87

    Excel con VBA

    EL NCLEO DE VBA

    Las acciones de VBA se realizan mediante la ejecucin delcdigo VBA.El cdigo VBA se escribe (o se graba) y se guarda

    en un mdulo VBA.Los mdulos se guardan en un libro de trabajo de Excel pero seeditan o visualizan en el editor de Visual Basic.

    Un mdulo VBA se compone de procedimientos. Unprocedimiento es bsicamente un cdigo de ordenador que realizaalguna accin sobre los objetos o con ellos.

    Sub Prueba()

    Sum= 1+1

    MSGBox La respuesta es & SumEnd Sub

    5

    Excel con VBA

    EL NCLEO DE VBA

    Un mdulo VBA puede tener tambin procedimientos Function.Un procedimiento Function devuelve un solo valor. Se puedellamar una funcin desde otro procedimiento VBA o usar unafrmula de hoja de clculo.

    Function AadirDos(arg1, arg2)AadirDos= arg1 + arg2

    End Function

    VBA manipula los objetos contenidos en su aplicacin anfitriona(en este caso Excel).

    6

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    4/87

    Excel con VBA

    EL NCLEO DE VBA

    Excel proporciona ms de 100 clases de objetos para manipular.Ejemplos de objetos son un libro de trabajo, una hoja de clculo,

    un rango de una hoja de clculo, un grfico y un rectngulodibujado. Existen muchos ms objetos a nuestra disposicin y sepueden manipular mediante el uso de cdigo VBA.

    Las clases de objetos estn ordenados jerrquicamente. Losobjetos pueden actuar como contenedores de otros objetos. Porejemplo, Excel es un objeto llamado Applcation y contiene otrosobjetos como WorkBook y CommandBar. El objeto WoorkBookpuede contener otros objetos como WorkSheet y Chart. Un objetoWoorkSheet puede contener objetos como Range, PivotTable y

    dems. Nos referimos al orden de estos objetos como modelo deobjeto de Excel.

    7

    Excel con VBA

    EL NCLEO DE VBA

    Objetos similares forman una coleccin. Por ejemplo, la coleccinWorkSheets est compuesta por todas las hojas de clculo de unlibro concreto. La coleccin CommandBars est compuesta portodos los objetos CommandBar. Las colecciones son objetos en s

    mismas.Cuando nos referimos a un objeto contenido o miembro, estamosespecificando su posicin en la jerarqua del objeto, usando unpunto como seprador entre el contenedor y el miembro.

    Application.WorkBooks(Libro1.xls)

    Esto se refiere al libro de trabajo Libro1.xls en la coleccinWorkBooks.

    8

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    5/87

    Excel con VBA

    EL NCLEO DE VBA

    Nos podemos referir a la Hoja1 del Libro1 comoApplication.WorkBooks(Libro1.xls).WorkSheets(Hoja1)

    Si se quiere omitir una referencia especfica a un objeto, Excelusa los objetos activos.Si el libro1 es el libro de trabajo activo, lareferencia anterior se puede simplificar a

    WorkSheets(Hoja1).Range(A1)

    Si se sabe que la Hoja1 es la hoja activa, se puede inclusosimplificar ms

    Range(A1)9

    Excel con VBA

    EL NCLEO DE VBA

    Los objetos tienen propiedades. Se puede pensar en unapropiedad como en una configuracin para un objeto.

    Por ejemplo, un objeto Range tiene propiedades como Value yName. Un objeto Chart tiene propiedades como HasTitle y Type.

    Se puede usar VBA para determinar las propiedades del objeto ytambin para cambiarlas.

    Nos podemos referir a propiedades para combinar el objeto consu propiedad, separados por punto.

    Por ejemplo nos podemos referir al valor de la celda A1 de laHoja1 como

    WorkSheets(Hoja1).Range(A1).Value10

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    6/87

    Excel con VBA

    EL NCLEO DE VBA

    Se pueden asignar valores a variables de VBA.Para asignar un valoren la celda A1 de la Hoja1 a una variables llamada Inters, use lasiguiente instruccin VBA:

    Inters = WorkSheets(Hoja1).Range(A1).ValueLos objetos disponen de mtodos.Un mtodo es una accin que se

    realiza con el objeto. Por ejemplo, uno de los mtodos para el objetoRange es ClearContents. Este mtodo borra el contenido del mtodo.

    Se pueden especificar mtodos mediante la combinacin del objetocon el mtodo, separados por punto.

    Range (A1).ClearContentsVBA tambin incluye todas las estructuras de lenguajes deprogramacin modernos, como matrices, bucles y de ms.

    11

    Excel con VBA

    EL EDITOR DE VISUAL BASIC

    Para activar el editor de Visual Basic puede usar algunadelas siguientes tcnicas:

    Presionar ALT+F11

    Seleccionar HERRAMIENTAS MACRO EDITOR DEVISUAL BASIC

    Hace clic sobre el botn Editor de Visual Basic, sitiadoen la barra de herramientas de Visual Basic

    12

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    7/87

    13

    Excel con VBA

    VENTANAS DEL EDITOR DE VISUAL BASIC

    Excel con VBA

    VENTANAS DEL EDITOR DE VISUAL BASIC

    El Editor de Visual Basic est compuesto de varias ventanas partes :Barra de mens

    Barras de herramientas

    Ventana Explorador de proyectos. Presenta un diagrama de rbol que contienecada libro de trabajo que est actualmente abierto en Excel. Cada libro de trabajoes un proyecto. Si esta ventana no esta abierta hay que presionar Control+R. Para

    esconder la ventana, hay que hacer clic en el botn Cerrar de su narra de ttulo.Ventana cdigo. Una ventana de cdigo, o ventana de mdulo, contiene uncdigo VBA. Cada elemento de un proyecto tiene asociada una ventana decdigo. Para visualizar una ventana de cdigo para un objeto, hay que hacerdoble clic sobre el objeto en la ventana del Explorador de proyectos.

    Ventana inmediato. Esta ventana es til para ejecutar instrucciones de VBAdirectamente, probar las instrucciones y limpiar el cdigo. Para abrir esta ventanapresione Control+G, para ocultarla basta hacer clic sobre el botn Cerrar de subarra de ttulo.

    14

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    8/87

    Excel con VBA

    AADIR UN NUEVO MDULO DE VBA

    Para aadir un nuevo mdulo de VBA a n proyecto, hay queseleccionar el nombre del proyecto en la ventana Explorador deproyectos y seleccionar INSERTAR MODULO. Cuando se graba

    una macro, Excel inserta automticamente un mdulo VBA paracontener el cdigo grabado.

    QUITAR UN MDULO VBA

    Hay que seleccionar el nombre del mdulo en la ventana delExplorador de proyectos y elegir ARCHIVO QUITAR.

    15

    Excel con VBA

    GUARDAR UN CDIGO VBA

    En general una ventana de cdigo puede soportar cuatro tipos decdigo:Procedimientos Sub. Conjuntos de instrucciones que ejecutan alguna accin.Procedimientos Function. Es un conjunto de instrucciones que devuelven un solo valor.Procedimientos Property. Son procedimientos especiales que se usan en mdulos de clase.Declaraciones. Es informacin acerca de una variable que se le proporciona aVBA.Un solo mdulo de VBA puede guardar cualquier cantidad de procedimientos Sub, procedimientos Function y declaraciones.

    16

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    9/87

    Excel con VBA

    INTRODUCIR UN CDIGO VBA

    Sub Hola()

    Msg = Su nombre es &Application.UserName & ?

    Ans = MsgBox(Msg, vbYesNo)

    If Ans = VbNo Then

    MsgBox No se preocupe

    Else

    MsgBox Debo ser clarividente!

    End If

    End Sub

    17

    18

    Excel con VBA

    INTRODUCIR UN CDIGO VBA

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    10/87

    Excel con VBA

    EJECUTAR UN CDIGO VBA

    Para ejecutar el procedimiento Hola es necesario asegurarse que elcursor est situado en cualquier parte del texto introducido.Despus se puede optar por uno de los siguientes mtodos:

    Presionar F5Seleccionar Ejecutar, Ejecutar Sub/UserFormHacer clic sobre el botn Ejecutar, Ejecutar Sub/UserForm

    19

    Excel con VBA

    USAR EL GRABADOR DE MACROS

    El siguiente ejemplo muestra la forma de grabar una macro quesimplemente cambia la configuracin de pgina de orientacinvertical a horizontal.

    1) Activar una hoja de clculo del libro activo

    2) Seleccionar el comando HERRAMIENTAS MACRO GRABARNUEVA MACRO

    3) Hacer cli en Aceptar para aceptar las opciones predeterminadas

    4) Seleccionar el comando ARCHIVO CONFIGURAR PGINA

    5) Seleccione la opcin Horizontal y haga clic en Aceptar

    6) Haga clic en el botn detener grabacin

    20

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    11/87

    Excel con VBA

    Sub Macro1()' Macro1 Macro (Ejemplo parte 1)' Macro grabada el 15/11/00 por PRI00'

    With ActiveSheet.PageSetup.PrintTitleRows = "".PrintTitleColumns = ""

    End WithActiveSheet.PageSetup.PrintArea = ""With ActiveSheet.PageSetup

    .LeftHeader = ""

    .CenterHeader = ""

    .RightHeader = ""

    .LeftFooter = ""

    .CenterFooter = ""

    .RightFooter = ""

    .LeftMargin = Application.InchesToPoints(0).RightMargin = Application.InchesToPoints(0).TopMargin = Application.InchesToPoints(0)

    21

    Excel con VBA

    .BottomMargin = Application.InchesToPoints(0) (Ejemplo parte 2)

    .HeaderMargin = Application.InchesToPoints(0)

    .FooterMargin = Application.InchesToPoints(0)

    .PrintHeadings = False

    .PrintGridlines = False

    .PrintComments = xlPrintNoComments

    .PrintQuality = -4

    .CenterHorizontally = False

    .CenterVertically = False

    .Orientation = xlLandscape

    .Draft = False

    .PaperSize = xlPaperA4

    .FirstPageNumber = xlAutomatic

    .Order = xlDownThenOver

    .BlackAndWhite = False

    .Zoom = 100

    End With

    End Sub

    22

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    12/87

    Excel con VBA

    A menudo el cdigo producido cuando se graba una macro esexcesivo.La macro anterior se puede simplificar a :

    Sub Macro1()' Macro1 Macro

    ' Macro grabada el 15/11/00 por PRI00

    With ActiveSheet.PageSetup

    .Orientation = xlLandscape

    End WithEnd Sub

    23

    Excel con VBA

    PERSONALIZAR EL ENTORNO DEL EDITOR DE VB

    La ficha Editor Si est configurada la opcin sugerencias de datos automticas, el editor de VB

    presenta el valor de la variable sobre la que esta situada el cursor cuando se estdepurando un cdigo.

    Seleccionar la opcin de sangra automtica determina si el editor de VB realizaautomticamente una sangra en cada lnea de cdigo nueva igual que la de la lneaanterior. Tambin puede colocar sangras con la tecla tab, o desde la barra deherramientas edicin.

    Cuando se encuentra activa la opcin modificar texto mediante arrastrar ycolocar permite copiar y mover texto mediante dicha tcnica.

    La opcin vista completa predeterminada del mdulo configura el estadopredeterminado de los mdulos nuevos (no afecta a los existentes). Si seselecciona, los procedimientos de la ventana cdigo aparecern como una solaventana con barras de desplazamiento. Si se desactiva esta opcin slo se podrver un solo procedimiento a la vez.

    Cuando se selecciona la opcin separador de procedimientos, presenta unas lneasseparadoras al inicio y al final del procedimiento de una ventana de cdigo.

    24

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    13/87

    Excel con VBA

    PERSONALIZAR EL ENTORNO DEL EDITOR DE VB

    La ficha Formato del editor

    La opcin colores del cdigo permite establecer el color del texto (de primer planoo de fondo), as como el color del indicador desplegado para varios elementos decdigo VBA.

    La opcin fuente permite seleccionar la fuente que se va usar en los mdulos deVBA 25

    Excel con VBA

    PERSONALIZAR EL ENTORNO DEL EDITOR DE VB

    La ficha Formato del editorLa configuracin del tamao especifica el tamao de fuente de los mdulos de VBA. El tamao predeterminado es 10.La opcin barra indicadora al margen controla el despliegue de la barra indicadora del margen vertical de los mdulos. Es til cuando se est depurando el cdigo. La ficha General

    En general lasopciones

    predeterminadassuelen ser muy

    tiles.

    26

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    14/87

    Excel con VBA

    PERSONALIZAR EL ENTORNO DEL EDITOR DE VB

    La ficha Acoplar

    Las configuraciones de esta ficha determinan el comportamiento de las diversas

    ventanas en el Editor de VB. Cuando una ventana est acoplada, se fija en un lugar alo largo de los bordes de la ventana del VBE. Esto facilita la identificacin ylocalizacin de una ventana en particular. Generalmente las configuraciones

    predeterminadas funcionan bien. 27

    Excel con VBA

    PERSONALIZAR EL ENTORNO DEL EDITOR DE VB

    El Examinador de ObjetosEl Examinador de objetos es una herramienta muy prctica que presenta cada propiedad ymtodo para todos los objetos disponibles. Cuando se activa el VBE, se puede llamar alExaminador de objetos presionando F2, o seleccionando la opcin Ver Examinador deObjetos.

    28

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    15/87

    Excel con VBA

    Parte 2:

    Variables, Constantes, Expresiones y Tipos de

    Datos

    29

    Excel con VBA

    VARIABLES Y TIPOS DE DATOS El propsito principal de VBA es manipular datos. Algunos residen en objetos

    tales como rangos de hojas de clculo. Otros se guardan en las variables que secrean.

    Una variable es una localizacin de almacenamiento con nombre, dentro de lamemoria del ordenador.

    VBA tiene algunas reglas relacionadas con los nombres de las variables: Se pueden usar caracteres alfabticos, nmeros y algn carcter de

    puntuacin, pero el primero de los caracteres debe ser alfabtico VBA no distingue entre maysculas y minsculas

    No se pueden usar espacios ni puntos

    No se pueden incrustar en el nombre de una variable los siguientes smbolos:#, $, %,!

    Los nombres de las variables pueden tener hasta 254 caracteres

    30

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    16/87

    Excel con VBA

    TIPOS DE DATOS INTEGRADOS EN VBA

    Tipo de dato Bytes usados Rango de valores

    Byte 1 0 a 255

    Boolean 2 Verdadero o Falso

    Integer 2 -32.768 hasta 32.767

    Long 4

    -2.147.483.648 hasta

    2.147.483.647

    Single 4

    -3.402823E38 a -1.401298E-4545

    (para valores negativos) y

    1.4012298E-45 a 3.42823E38

    (para valores positivos)

    Double 8

    Currency 8

    Date 8

    Del 1 Enero, 0100 hasta 31 de

    diciembre, 9999

    Object 4

    String (de longitud variable)String (de longitud fija)

    31

    Excel con VBA

    MBITO DE LAS VARIABLESEl mbito de una variable determina el mdulo y el procedimiento en el quese puede usar una variable.

    mbitoCmo se declara una variable en este

    mbito

    Un procedimiento Incluye instrucciones Dim, Static o Privatedentro del procedimiento.

    Al nivel de mduloIncluye una instruccin Dim antes delprimer procedimiento de un mdulo.

    Todos los mdulosIncluye una instruccin Public antes delprimer procedimiento de un mdulo.

    Variables localesUna variable local es una variable declarada dentro de un procedimiento. Estasvariables se pueden usar slo en el procedimiento en que se declararon. Cuando el

    procedimiento finliza, la variable deja de existir y Excel libera su memoria.

    32

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    17/87

    Excel con VBA

    Variables localesLa manera ms comn de declarar una variable local es situarla dentro de unainstruccin DIM.

    Sub MiSub()

    DIM x As Integer

    DIM First As Long

    DIM InerestRate As Single

    DIM TodaysDate As Date

    DIM UserName As String * 20

    Aqu se sita el cdigo del procedimiento

    End Sub

    Esto tambin es vlido:

    DIM x As Integer, y As Integer, z As Integer

    Esto no es vlido:DIM x, y, z As Integer

    33

    Excel con VBA

    Variables a nivel de mduloAlgunas veces se desear que una variable est disponible para todos los

    procedimientos de un mdulo. Para ello, se declara la variable antes del primerprocedimiento del mdulo (fuera de cualquier procedimiento o funcin).

    DIM fecha As Date

    Sub Dias()

    Aqu va el cdigoEnd Sub

    Sub Meses()

    Aqu va el cdigo

    End Sub

    Variables PublicPara que una variable est disponible para todos los procedimientos de un proyectode Vba, se declara la variable a nivel de mdulo con el uso de la palabra public.

    Public IntersAnual as Long

    34

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    18/87

    Excel con VBA

    Variables StaticLas variables estticas son un caso especial. Se declaran a nivel de procedimiento yretienen su valor despus de que el procedimiento finaliza.

    Sub Ejemplo()Static Counter As Integer

    Aqu va el cdigo

    End Sub

    35

    Excel con VBA

    CONSTANTES

    Declarar ConstantesLas constantes se declaran usando Const.Const NumTrim As Integer = 4Const Inters = 0.05, Periodo = 12Const Nombre Mod as String = Macros PresupuestosPublic Const NombreApp As String = Aplicacin PresupuestosAl igual que las variables, las constantes tambin poseen un mbito. Para que una constante est disponible slo dentro de in determinado

    procedimiento, hay que declararla despus de Sub o Function para convertirla enuna constante local.

    Para que una constante est disponible para todos los procedimientos de unmdulo, se tiene que declarar antes del primer procedimiento de un mdulo.

    Para que una constante est disponible para todos los mdulos de un libro detrabajo, hay que usar la palabra Public, y declarar la constante antes del primer

    procedimiento de un mdulo.

    36

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    19/87

    Excel con VBA

    CONSTANTES

    Declarar ConstantesExcel y VBA contienen muchas constantes predeterminadas, que se pueden usar sin

    necesidad de declararlas; de hecho no es necesario conocer el valor de estas

    constantes para usarlas.Sub CalcManual()

    Application.Calculation = xlManual

    End Sub

    TRABAJAR CON CADENASExisten dos tipos de cadenas en VBA:

    Cadenas de longitud fija, que se declaran con un nmero especfico de caracteres.La mxima longitud es de 65.536 caracteres.

    Cadenas de lingitud variable, que tericamente pueden tener hasta 2.000 milonesde caracteres.

    Dim MiCadena As String * 50Dim SuCadena As String

    37

    Excel con VBA

    TRABAJAR CON FECHASDim Hoy As DateDim HoraInicio As DateConst PrimerDa As Date = #1/1/2001#Const MedioDa As date = #12:00:00#EXPRESIONES DE ASIGNACIN

    Una expresin de asignacin es una instruccin de VBA que realiza evaluacionesmatemticas y asigna el resultado a una variable o aun objeto.VBA usa el signo igual = como operador de asignacin.x = 1

    Se puede usar una secuencia dex = x + 1 continuacin (espacio seguido dex = (y * 2) / (z * 2) un signo de subrayado) paraFileOpen = true facilitar la lectura de expresiones

    Range(Ao). Value = 1995 muy largas.

    38

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    20/87

    Excel con VBA

    OPERADORES ARITMTICOS

    + Suma, - Resta, * Multiplicacin, / Divisin, \ Divisin entera,Mod Resto, ^ exponencial, & Concatenacin

    OPERADORES COMPARATIVOS= Igual, < Menor, > Mayor, = Mayor oigual, Distinto

    OPERADORES LGICOS

    Not (negacin lgica, And (conjuncin lgica), Or (disyuncinlgica), XoR (exclusin lgica), Eqv (equivalencia en dosexpresiones), Imp (implicacin lgica)

    39

    Excel con VBA

    MATRICES Una matriz es un grupo de elementos del mismo tipo que tienen un nombre

    comn; para referirse aun elemento especfico de una matriz se usa el nombrede la matriz y un nmero de ndice.

    Se puede declarar una matriz con DIM o Public como cualquier variable.

    MATRICES DE UNA DIMENSINDIM MiMatriz(1 To 100) As Integer

    DIM MiMatriz (100)

    MiMatriz(1) = 20

    MATRICES MULTIDIMESIONALESDIM MiMatriz(1 To 100, 1 to 10) As Integer

    MiMatriz(1,2) = 20

    40

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    21/87

    Excel con VBA

    VARIABLES DE OBJETOUna variable de objeto es una variable que representa un objeto entero, como puede ser un rango o una hoja de clculo.Las variables de objeto son importante por dos razones:Pueden simplificar el cdigo

    Pueden hacer que el cdigo se ejecute ms de prisa.

    Se declaran con DIM o Public.Por ejemplo, la expresin siguiente declara AreaEntradaDatos como un objeto Range.Para ver como simplifican el cdigo, veamos un ejemplo sin usar variables de objeto:Sub VarSinObj();

    Worksheets(Hoja1).Range(A1).Value = 124Worksheets(Hoja1).Range(A1).Font.Bold = TrueWorksheets(Hoja1).Range(A1).Font. Italic = True

    End Sub

    41

    42

    Excel con VBA

    Esta rutina introduce un valor en la celda A1 de la HOJA1, del libro de trabajo activo,y despus aplica Negrita y cursiva a su contenido. Para reducir el cdigo se puedecondensar la rutina con una variable de objeto.

    Sub VarObj();

    Dim MiCelda As Range

    Set Micelda = Worksheets(Hoja1).Range(A1)

    MiCelda.Value = 124

    MiCelda.Font.Bold = True

    MiCelda.Font. Italic = True

    End Sub

    TIPOS DE DATOS DEFINIDOS POR EL USUARIOVBA permite crear tipos de datos personalizados definidos por el usuario (un conceptoms parecido a los registros de Pascal o las estructuras de C).

    Type InfoClientes

    Empresa As String * 25

    Ventas As Long

    End Type

    Los tipos de datos personalizados se definenfuera de los procedimientos, en la partesuperior del mdulo

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    22/87

    Excel con VBA

    TIPOS DE DATOS DEFINIDOS POR EL USUARIODIM Clientes(1 To 100) As InfoClientes

    Se puede hacer referencia a una componente particular, de la siguiente manera:

    Clientes(1).Empresa Diseo GrficoClientes(1).Ventas= 187000

    Para copiar la informacin de Clientes(1) en Clientes(2) se puede hacer lo siguiente:

    Clientes(2) = Clientes(1)

    FUNCIONES INTEGRADASLas funciones integradas de VBA no son las misma que las de Excel. La funcinUCASE de VBA, que convierte una cadena a maysculas es equivalente a la funcinMAYUSC de Excel.

    Sub MostrarRaiz() Para obtener la lista de funciones de

    MiValor = 25 VBA, se teclea en el cdigo VBAseguido de un punto. El Editor de VB

    RaizCuadrada = Sqr(MiValor) despliega una lista con todas lasMsgBox RaizCuadrada funciones.

    End Sub 43

    Excel con VBA

    FUNCIONES INTEGRADASEl objeto WorsheetFunction, que est contenido en el objeto Application, contienetodas las funciones de hoja de clculo que se pueden llamar desde los procedimientosVBA. Veamos un ejemplo para convertir un nmero decimal en nmero romano.

    Sub MostrarRomano

    ValorDecimal = 1999

    ValorRomano = Application.WorsheetFunction.Romano(ValorDecimal)

    MsgBox ValorRomanoEnd Sub

    Es importante saber que no se puede usar una funcin de hoja de clculo que tengauna funcin de VBA equivalente.

    Por ejemplo no se puede usar la funcin de hoja de clculo RAIZ, porque VBA tienela funcin SQR. La siguiente sentencia da error:

    Application.WorksheetFunction.RAIZ(144)

    44

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    23/87

    Excel con VBA

    Parte 3:

    Manipulacin objetos ycolecciones

    45

    Excel con VBA

    VBA ofrece dos importantes dos importantes estructuras que pueden simplificar eltrabajo con objetos y colecciones:

    Estructuras With ...End With

    Estructuras For Each...next

    ESTRUCTURAS WITH...END WITHPermite realizar mltiples operaciones en un solo objeto.

    Sub CambiarFuente()With Selection.Font

    .Name = Times New Roman

    .FontStyle = Bold Italic

    .Size = 12

    .Underline = xlSingle

    .ColorIndex = 5

    End With

    End Sub

    46

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    24/87

    47

    Excel con VBA

    ESTRUCTURAS FOR EACH...NEXTRecordemos que una coleccin es un grupo de objetos relacionado. Por ejemplo, lacoleccin WorkBooks es una coleccin de todos los objetos WorkBook abiertos.

    No es necesario saber la cantidad de elementos que existen en una coleccin para usar

    la estructura For Each...Next.Sub ContarHojas()

    Dim Item As Worksheet

    For Each Item In ActiveWorkbook.Sheets

    MsgBox Item.Name

    Next Item

    End Sub

    Sub VentanasAbiertas()

    Suma = 0

    For Each Item In Windows

    Suma = Suma + 1

    Next ItemMsgBox Total de ventanas abiertas, & Suma

    End Sub

    Cuenta el nmero de ventanasabiertas

    Muestra el nombres de lashojas del libro de trabajo

    activo

    48

    Excel con VBA

    ESTRUCTURAS FOR EACH...NEXT

    Sub CerrarActivo()

    For Each Book In Workbooks

    If Book.Name ActiveWorkbook.Name Then Book.Close

    Next BookEnd Sub

    Sub ConvertirMayus()

    For Each Cell In Selection

    Cell.Value = UCASE(Cell.Value)

    Next Cell

    End Sub

    Cierra todos los libros detrabajo, excepto el activo

    Convierte a maysculas unrango previamente

    seleccionado

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    25/87

    49

    Excel con VBA

    ESTRUCTURAS IF...THENSe usa para ejecutar una o ms instrucciones de forma condicional. La sintaxis generales:

    Ifcondicin Then inst_verdaderas [Else inst_falsas]

    Sub Positivos()

    a = InputBox("Ingrese un nmero")

    If a > 0 Then

    MsgBox "Nmero Positivo"

    End If

    End Sub

    Sub Positivos_Negativos()

    a = InputBox("Ingrese un nmero")

    If a > 0 Then MsgBox "Nmero Positivo" Else _MsgBox "Nmero negativo"

    End Sub

    Ingresa un nmero, y si esmayor que cero muestra elmensaje Nmero Positivo

    Ingresa un nmero, y si esmayor que cero muestra el

    mensaje Nmero Positivo,y si no Nmero Negativo

    Excel con VBA

    ESTRUCTURAS IF...THENIngresa un nmero, y si es

    Sub Positivos_Negativos_Cero() mayor que cero muestra ela = InputBox("Ingrese un nmero") mensaje Nmero Positivo,If a > 0 Then si es menor que cero

    MsgBox "Nmero Positivo" muestra el mensajeNmero Negativo, y si es

    ElseIf a < 0 Thencero muestra el mensaje

    MsgBox "Nmero negativo " CeroElseIf a = 0 Then

    MsgBox " Cero "

    End If

    End Sub

    La funcin IIF de VBA es parecida a la funcin IF (SI) de Excel

    IIF(expresin, parte verdadera, parte falsa)Sub Descuento()

    MsgBox IIf(Range("A1") = 0, "Cero", "Distinto de Cero")

    End Sub50

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    26/87

    Excel con VBA

    ESTRUCTURAS SELECT CASELa estructura Select Case es til para elegir entre tres o ms opciones

    Sub Positivos_Negativos_Cero()

    a = InputBox("Ingrese un nmero")

    Select Case a

    Case Is > 0

    Msg = "Nmero Positivo"Case Is < 0

    Msg = "Nmero negativo"Case Else

    Msg = "Cero"End SelectMsgBox Msg

    End Sub

    51

    Excel con VBA

    ESTRUCTURAS SELECT CASE

    Sub Descuento1()

    Cantidad = InputBox("Introducir cantidad: ")

    Select Case Cantidad

    Case "": Exit Sub

    Case 0 To 24: Descuento = 0.1Case 25 To 49: Descuento = 0.15Case 50 To 74: Descuento = 0.2Case Is >= 75: Descuento = 0.25

    End Select

    MsgBox "Descuento: " & Descuento

    End Sub

    52

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    27/87

    Excel con VBA

    ESTRUCTURAS SELECT CASETambin se pueden anidar estructuras Select Case

    El siguiente procedimiento, verifica el estado de la ventana de Excel (maximizada,minimizada o normal) y despus presenta un mensaje describiendo dicho estado. Si el

    estado de la ventana de Excel es norma, el procedimiento verifica el estado de laventana activa y despus presenta otro mensaje.Sub AppWindow()

    Select Case Application.WindowState

    Case xlMaximized: MsgBox "App Maximizada"

    Case xlMinimized: MsgBox "App Minimizada"

    Case xlNormal: MsgBox "App Normal"

    Select Case ActiveWindow.WindowState

    Case xlMaximized: MsgBox "Libro Maximizado"

    Case xlMinimized: MsgBox "Libro Minimizado"

    Case xlNormal: MsgBox "Libro Normal"

    End SelectEnd Select

    End Sub 53

    54

    Excel con VBA

    BUCLES FOR...NEXTEsta sentencia de iteracin se ejecuta un nmero determinado de veces

    Su sintaxis es:

    For contador = empezarTo finalizar[Step valorincremento]

    [Instrucciones]

    [Exit For][instrucciones]

    Next [contador]

    Sub SumaNmeros

    Sum = 0

    For Count = 0 To 10

    Sum = Sum + Count

    Next Count

    MsgBox Sum

    End Sub

    Suma los diez primerosnmeros naturales

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    28/87

    55

    Excel con VBA

    BUCLES FOR...NEXT

    Sub SumaNmerosPares

    Sum = 0

    For Count = 0 To 10 Step 2

    Sum = Sum + Count

    Next Count

    MsgBox Sum

    End Sub

    Sub BuclesAnidados

    Dim MiMatriz(1 To 3, 1 To 3)

    For i = 1 To 3

    For j = 1 to 3

    MiMatriz(i,j) = 2

    Next j

    Next i

    End Sub

    Suma los nmeros pares

    entre 0 y 10

    Asigna el valor 2 atodos las casillas de una

    matriz de 3 x 3

    56

    Excel con VBA

    BUCLES DO...WHILEDo While se ejecuta mientras se verifica una condicin especificada. Do While

    puede tener cualquiera de estas dos sintaxis.

    Sub DoWhileDemo()

    Do While IsEmpty(ActiveCell)

    ActiveCell.Value = 0

    ActiveCell.Offset(1, 0).Select

    Loop

    End Sub

    Do [While condicion][instrucciones][Exit Do][instrucciones]

    Loop

    Do[instrucciones][Exit Do][instrucciones]

    Loop [While condicion]

    Mientras la celda activa estevaca se desplaza hacia

    abajo asignndole a cadacelda el valor 0

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    29/87

    Excel con VBA

    BUCLES DO...UNTILEl bucle se ejecuta hasta que la condicin llegue a ser verdadera. Do Until puede tenercualquiera de estas dos sintaxis.

    Do Until condicion][instrucciones] Do [Exit Do] [instrucciones][instrucciones] [Exit Do]

    Loop [instrucciones]Loop [Until condicion]

    Sub DoUntilDemo()

    Do ActiveCell.Value = 0ActiveCell.Offset(1, 0).Select

    Loop Until Not IsEmpty(ActiveCell)

    End Sub57

    Excel con VBA

    Parte 4:

    Procedimientos SUB conVBA

    58

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    30/87

    59

    Excel con VBA

    PROCEDIMIENTOS SUB DE VBAEJEMPLO: Mover una hoja y grabarlo con el grabador de macros

    Sub MoverHoja()

    Sheets("Hoja3").SelectSheets("Hoja3").Move Before:=Sheets(1)

    End Sub

    Move es un mtodo que desplaza una hoja a otro lugar de un libro. Puede moversehacia atrs (Before) o hacia delante (After).

    Cmo contar las hojas?

    Sub ContarHojas()

    For Each hoja In Worksheets

    contar = contar + 1

    Next

    MsgBox "Cantidad de hojas " & contarEnd Sub

    Tambin se puede probar en la ventana de Inmediato:

    ?ActiveWorkBook.Sheets.Count

    Excel con VBA

    PROCEDIMIENTOS SUB DE VBA

    Cmo saber el nombre de una hoja?

    Probar en la ventana de Inmediato: ?ActiveWorkBook.Sheets(1).Name, aparecer elnombre de la primera hoja HOJA1.

    Configuracin general1) Crear un libro de trabajo vaco con cinco hojas de clculo, llamadas Hoja1 ... Hoja5.2) mover las hojas al azar para que no tengan un orden particular.3) Guardar el libro de trabajo como Test.xls.4) Activar el editor de VB y seleccionar el proyecto Personal.xls del Explorador de

    proyectos. Si Personal no aparece, grabar una macro (cualquiera) y como destinopara la macro seleccionar libro de macros personal.5) Insertar un nuevo mdulo de VBA (Insertar Mdulo).6) Crear un procedimiento vaco llamado SortSheets.

    60

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    31/87

    Excel con VBA

    PROCEDIMIENTOS SUB DE VBA7) Activar Excel. Usar el comando Herramientas, Macro, Macros (botn Opciones)

    para asignar una tecla de mtodo abreviado a la macro. La combinacin Control-Mays-S puede ser una buena eleccin.

    Escribir el cdigo

    Sub SortSheets()

    Dim SheetNames()

    SheetCount = ActiveWorkbook.Sheets.Count

    ReDim SheetNames(1 To SheetCount)

    For i = 1 To SheetCount

    SheetNames(i) = ActiveWorkbook.Sheets(i).Name

    MsgBox SheetNames(i)

    Next iEnd Sub

    61

    Excel con VBA

    PROCEDIMIENTOS SUB DE VBAPara probar el cdigo se activa el libro Test.xls, y se prueba la combinacin Contriol-Mays-S.

    Luego debera borrase la instruccin MsgBox.

    Escribir el procedimiento de clasificacinSub BubbleSort(List())

    Dim First As Integer, Last As Integer

    Dim i As Integer, j As Integer, Temp As String

    First = LBound(List)Last = UBound(List)

    For i = First To Last - 1

    For j = i + 1 To Last

    If List(i) > List(j) ThenTemp = List(j)List(j) = List(i)List(i) = Temp

    End IfNext jNext i 62

    End Sub

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    32/87

    Excel con VBA

    PROCEDIMIENTOS SUB DE VBASub SortSheets()

    Dim SheetNames() As String

    Dim i As Integer

    Dim SheetCount As Integer

    SheetCount = ActiveWorkbook.Sheets.Count

    ReDim SheetNames(1 To SheetCount)

    For i = 1 To SheetCount

    SheetNames(i) = ActiveWorkbook.Sheets(i).NameNext iCall BubbleSort(SheetNames)For i = 1 To SheetCount

    ActiveWorkbook.Sheets(SheetNames(i)).Move ActiveWorkbook.Sheets(i)

    Next i

    End Sub

    63

    Excel con VBA

    Parte 5:

    Procedimientos FUNCTIONcon VBA

    64

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    33/87

    Excel con VBA

    PROCEDIMIENTOS FUNCTION DE VBALos procedimientos Function devuelven un solo valor (al igual que las funciones de

    hoja de clculo de Excel y las funciones incorporadas en VBA).

    Los procedimientos Function se pueden usar en dos situaciones: Como parte de una expresin en un procedimiento VBA

    En frmulas que se crean en una hoja de clculo

    Lo que no pueden realizar las funciones de hoja de clculo personalizadas

    Al disear funciones personalizadas, es importante entender una distincin claveentre funciones a las que se puede llamar desde un procedimiento VBA yfunciones que se usan en frmulas de hoja de clculo.

    Los procedimientos de funcin usados en frmulas de hoja de clculo deben serpasivos. Por ejemplo, un cdigo dentro de un procedimiento de funcin no

    puede manipular un rango. Es necesario recordar que una funcin devuelve unvalor, no ejecuta acciones con objetos.

    65

    Excel con VBA

    PROCEDIMIENTOS FUNCTION DE VBADECLARAR UNA FUNCIN

    [Private | Public ] [Static] Function nombre [(lista_argumentos)] [As tipo]

    [instrucciones]

    [Exit Sub]

    [instrucciones]

    [nombre = expresin]

    End Function

    Private. Opcional. Indica que el procedimiento Functiones accesible slo para otrosprocedimientos del mismo mdulo.

    Public. Opcional. Indica que el procedimiento es accesible para todos losprocedimientos, de todos los proyectos activos de VBA.

    Static. Opcional. Indica que las variables del procedimiento Function se conservanentre llamadas.

    Sub. Requerido. Palabra clave que indica el principio de un procedimiento quedevuelve un valor u otro dato.

    66

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    34/87

    Excel con VBA

    PROCEDIMIENTOS FUNCTION DE VBADECLARAR UNA FUNCIN

    nombre. Requerido. Cualquier nombre de procedimiento Function vlido (Igual que

    las variables, pero no se pueden poner nombres de celdas, i.e., J34). Cuando finalizala funcin, el resultado de un solo valor se asigna a su propio nombre.

    lista_argumentos. Opcional. Representa una lista de variables, encerradas entreparntesis, que reciben argumentos pasados al procedimiento. Para separar losargumentos se usa una coma.

    tipo. Opcional. Es el tipo de dato devuelto por la funcin.

    instrucciones. Opcional. Cualquier nmero de instrucciones de VBA vlidas.

    Exit Function. Opcional. Una instruccin que fuerza una salida inmediata delprocedimiento Function antes de su conclusin formal.

    End Function. Requerido. Indica el final del procedimiento function.

    67

    Excel con VBA

    EJECUTAR PROCEDIMIENTOS FUNCTIONDesde un procedimiento

    Function SumaMatriz(matriz() As Integer)Dim i As Integer, suma As Integersuma = 0For i = LBound(matriz) To UBound(matriz)

    suma = suma + matriz(i)Next

    SumaMatriz = suma

    End Function

    Sub LlamarSumaMatriz()

    Dim mat(5) As IntegerDim SumaTotal As Integermat(1) = 4: mat(2) = 5: mat(3) = 8: mat(4) = 1: mat(5) = 2SumaTotal = SumaMatriz(mat)

    MsgBox "La suma de la matriz es: " & SumaTotal

    End Sub68

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    35/87

    Excel con VBA

    EJECUTAR PROCEDIMIENTOS FUNCTIONEn una frmula de hoja de clculo

    usar funciones personalizadas en frmulas de hoja de clculo es como usar funciones

    integradas, excepto porque es necesario asegurarse de que Excel puede localizar elprocedimiento Function. Si dicho procedimiento est localizado en el mismo lobrode trabajo, no es necesario hacer nada especial. Si est localizado en un libro detrabajo diferente, se puede decir a Excel que lo encuentre. Para ello existen dosmaneras:

    Preceder el nobre de la funcin con una referencia al archivo

    = MisFunciones.xls!ContarNombres(A1:A1000)

    Establecer una referencia al libro de trabajo. Para ello se emplea el comando delEditor de VBA, Herramientas, Referencias. Si la funcin est definida en un libro

    de trabajo referenciado, no ser necesario usar el nombre de la hoja de clculo.

    69

    Excel con VBA

    EJECUTAR PROCEDIMIENTOS FUNCTIONLos procedimientos Function no aparecen en el cuadro de dilogo de las macros.Adems no se puede ejecutar directamente desde el Editor de VBA.

    Para ejecutar una funcin es necesario definir un procedimiento Sub que la llame. Sila funcin esta diseada para ser usada en frmulas de hojas de clculo, se puedeintroducir una simple frmula para probarla.

    ARGUMENTOS DE FUNCIN

    Los argumentos pueden ser variable (incluyendo matrices), constantes, literales oexpresiones

    Algunas funciones no tienen argumentos

    Algunas funciones tienen un nmero fijo de argumentos (desde 1 a 60)

    Algunas funciones tienen una combinacin de argumentos opcionales y requeridos

    70

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    36/87

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONUna funcin sin argumentos

    La siguiente funcin devuelve la propiedad UserName del objeto Application.

    Function Usuario()Usuario = Application.UserName

    End Function

    Cuando se introduce la siguiente frmula, la celda devuelve el nombre del usuarioactual:

    =Usuario()Para usar esta funcin en otro procedimiento, se debe asignar a una variable, usarlaen una expresin o emplearla como argumento para otra funcin.

    Sub MostrarUsuario()

    MsgBox El usuario es: & Usuario()End Sub

    71

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONUna funcin con un argumentoEl siguiente ejemplo permite calcular las comisiones que debe cobrar cada vendedor de acuerdoa sus ventas mensuales.

    VENTAS MENSUALES % DE COMISIN0-9.999 8,00%

    10.000-19999 10,50%20.000-39.999 12,00%40.000+ 14,00%

    Una forma de calcular las comisiones es mediante el uso e la fucnin SI:

    =si(Y(A1>00,A1=10000,A1>=19999,99),A1*0,105,

    si(Y(A1>=20000,A1=40000,A1*0,14,0))))

    Este es un mal planteamiento por varias razones. Primera, la frmula es demasiadocompleja y muy difcil de entender. Segunda, los valores son cdigos cerrados dentro de la frmula haciendo la modificacin de la frmula muy difcil.

    72

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    37/87

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONUna funcin con un argumento

    Un planteamiento mejor es crear una funcin personalizada como la siguiente:

    Function Comision(Ventas)Const porcentaje1 = 0.08

    Const porcentaje2 = 0.105

    Const porcentaje3 = 0.12

    Const porcentaje4 = 0.14

    Select Case Ventas

    Case 0 To 9999.9: Comision = Ventas * porcentaje1Case 1000 To 19999.9: Comision = Ventas * porcentaje2 Case 20000 To 39999.9: Comision = Ventas * porcentaje3Case Is >= 40000: Comision = Ventas * porcentaje4

    End SelectEnd Function

    73

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONUna funcin con un argumento

    Sub CalcComm()

    sales = InputBox("Introducir Ventas: ")

    MsgBox "La comisin es: " & Comision(sales)

    End Sub

    74

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    38/87

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONUna funcin con dos argumentos

    La comisin total pagada se incrementa en un 1 por ciento por cada ao que elvendedor ha estado en la compaa.

    Function Comision2(Ventas, Aos)Const porcentaje1 = 0.08

    Const porcentaje2 = 0.105

    Const porcentaje3 = 0.12

    Const porcentaje4 = 0.14

    Select Case Ventas

    Case 0 To 9999.9: Comision2 = Ventas * porcentaje1

    Case 1000 To 19999.9: Comision2 = Ventas * porcentaje2

    Case 20000 To 39999.9: Comision2 = Ventas * porcentaje3

    Case Is >= 40000: Comision2 = Ventas * porcentaje4

    End Select

    Comision2 = Comision2 + (Comision2 * Aos / 100)75

    End Function

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONUna funcin con un argumento de matriz

    La siguiente funcin acepta una matriz como argumento y devuelve la suma de suselementos

    Function SumaMatriz(List)

    SumaMatriz = 0

    For i = LBound(List) To UBound(List)

    SumaMatriz = SumaMatriz + List(i)Next i

    End Function

    Sub HacerList()

    Dim Num(1 To 100) As Integer

    For i = 1 To 100

    Num(i) = iNext iMsgBox SumaMatriz(Num)

    End Sub76

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    39/87

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONUna funcin con argumentos opcionales

    Function Calculo(A As Integer, B As Integer, Optional operacin As String)

    If IsMissing(operacin) Then operacin = "suma"Select Case operacin

    Case Is = "suma": Calculo = A + BCase Is = "resta": Calculo = A - BCase Is = "multiplicacion": Calculo = A * BCase Is = "division": Calculo = A / B

    End Select

    End FunctionSub probar()

    valor = Calculo(2, 4)Sub probar() MsgBox valor

    valor = Calculo(2, 4, "resta") End SubMsgBox valor

    End Sub 77

    Excel con VBA

    EJEMPLOS DE PROCEDIMIENTOS FUNCTIONEspecificar la categora de Funcin

    Es siguiente cdigo se ejecuta siempre que el libro de trabajo est abierto. Esteprocedimiento asigna la funcin Comision a la categora financieras.

    Private Sub Workbook_Open()

    Application.MacroOptions Macro:="Comision", Category:=3

    End SubNMERO DECATEGORA NOMBRE DE CATEGORIA

    0 Todas1 Financieras2 Fecha y hora3 Matemticas y trigonomtricas4 Estadsticas5 Bsqueda y referencia6 Base de datos7 Texto8 Lgicas9 Informacin

    10 Comandos11 Personalizado12 Control de macros13 DDE/Externas14 Definidas por el usuario

    15 Ingeniera78

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    40/87

    Excel con VBA

    Parte 6:

    Formularios

    79

    Excel con VBA

    UserFormsUn cuadro de dilogo personalizado se genera en un UserForm y se puede acceder a l con ayuda del Editor de VB.A continuacin se expone la secuencia tpica de fases a realizar para la creacin deun UserForm:1) Insertar un UserForm en el libro de trabajo2) Escribir un procedimiento que despliegue el UserForm Este procedimiento estlocalizado en un mdulo de VBA (no en el mdulo de cdigo para el UserForm)3) Aadir controles al UserForm4) Ajustar algunas propiedades a los controles aadidos5) Escribir procedimientos de controlador de evento para los controles. Estos

    procedimientos que estn situados en la ventana de cdigo para el UserForm, se ejecutan cuando ocurren varios eventos (como hacer clic con el ratn).

    80

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    41/87

    Excel con VBA

    UserFormsINSERTAR UN NUEVO UserForm

    Activar el Editor de VB y seleccionar el Libro de trabajo correspondiente y elegir el

    comando Insertar, UserForm.

    Un libro de trabajo puede tener cualquier nmero de UserForms, y cada uno de elloscontiene un solo UserForms. Los UserForms tienen nombres como UserForm1,UserForm2, y as sucesivamente.

    Se puede cambiar el nombre del UserForm para que su identificacin sea ms fcil.Para ello se selecciona el UserForm y se usa la ventana propiedades, desde donde se

    puede cambiar la propiedad Name (presionar F4 si la ventana de propiedades no estdesplegada).

    81

    82

    Excel con VBA

    UserForms

    VentanaPropiedades

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    42/87

    Excel con VBA

    UserFormsDESPLEGAR UN UserForm

    Se usa el mtodo Show del objeto UserForm. El siguiente procedimiento, que se

    encuentra dentro de un mdulo de VBA normal, despliega UserForm1:

    Private Sub UserForm1.Clik()

    End Sub

    Cuando se despliega el UserForm, permanece visible en la pantalla hasta que seoculta. El procedimiento puede tanto cargar el UserForm (con una instruccinUnload) como ocultarlo (con el mtodo Hide del objeto UserForm)

    AADIR CONTROLES A UN UserForm

    Se usa el Cuadro de herramientas (el Editor de VB no tiene comandos de men paraaadir controles). Este cuadro se puede desplegar con Ver, Cuadro de Herramientas.

    83

    Excel con VBA

    UserFormsAADIR CONTROLES A UN UserForm

    Se usa el Cuadro de herramientas (el Editor de VB no tiene comandos de men paraaadir controles). Este cuadro se puede desplegar con Ver, Cuadro de Herramientas.

    84

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    43/87

    Excel con VBA

    UserFormsAADIR CONTROLES A UN UserForm

    Se hace clic sobre el botn del Cuadro de Herramientas que corresponde al control

    que se quiere aadir, y despus se hace clic dentro del cuadro de dilogo.Cuando se aade un control nuevo, se le asigna un nombre que combina el tipo decontrol con la secuencia numrica para ese tipo de control. Por ejemplo si se aade el

    primer botn de comando se le asignar el nombre ComandButton1, y al segundoque se aada CommandButton2. Siempre conviene cambiarle el nombre a loscontroles para que sean ms representativos. Los nombres de lo controles se cambiandesde la ventana de Propiedades.

    CONTROLES DISPONIBLES PARA EL USUARIO

    Casilla de verificacin (CheckBox). Es til para ofrecer al usuario una opcinbinaria: s o no, verdadero o falso, activar o desactivar, y dems. Cuando se

    selecciona una Casilla de verificacin posee un valor Verdadero; en caso contrario esFalso.

    85

    Excel con VBA

    UserFormsCONTROLES DISPONIBLES PARA EL USUARIO

    Cuadro combinado (ComboBox). Es similar al cuadro de lista. Sin embargo, unCuadro Combinado es un cuadro de lista desplegable que presenta un solo elemento

    por vez. Otra diferencia con respecto al cuadro de lista es que el usuario puedeintroducir un valor que no aparece en la lista dada de elementos.

    Botn de comando (CommandButton). Todo cuadro de dilogo que se genereprobablemente tenga, al menos, un Botn de comando. Normalmente se tendr unBotn de comando etiquetado como Aceptar y otro etiquetado como Cancelar.

    Botn Macro (Frame). Se usa para agrupar otros controles. Se puede hacer bien pormotivos estticos o por agrupar lgicamente un conjunto de controles. Un Marco es

    particularmente til cuando el cuadro de dilogo contiene ms de un grupo decontroles de Botn de opcin.

    86

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    44/87

    Excel con VBA

    UserFormsCONTROLES DISPONIBLES PARA EL USUARIO

    Imagen (Image).Se usa para desplegar una imagen grfica, que pude provenir de un

    archivo o se pude pegar desde el Portapapeles. La imagen grfica se guarda en ellibro de trabajo. De esta forma, se puede distribuir el libro a cualquier persona y noes necesario incluir una copia del archivo grfico.

    Etiqueta (Label). Simplemente presenta texto en el cuadro de dilogo.

    Cuadro de lista (Listbox). Presenta una lista de elementos donde el usuario puedeseleccionar uno (o mltiples elementos). Estos controles son muy flexibles. Porejemplo, se puede especificar un rango de hoja de clculo que contenga elementos deun Cuadro de lista, y este rango puede constar de mltiples columnas

    Pgina mltiple (Multipage). Permite crear cuadros de dilogo con fichas, como elque aparece cuando se selecciona el comando herramientas, opciones. De forma

    predeterminada una pgina mltiple consta de dos pginas. Para aadir pginas, sehace clic con el botn derecho del ratn sobre una ficha y se selecciona Nueva

    pgina desde el men contextual.

    87

    Excel con VBA

    UserFormsCONTROLES DISPONIBLES PARA EL USUARIO

    Botn de opcin (OptionButtons). Son muy tiles cuando el usuario necesitaseleccionar entre un pequeo nmero de elementos. Estos botones se usan siempreen grupos de al menos dos elementos. Cuando se selecciona uno de los botones, losotros botones del grupo no estn seleccionados. Si el cuadro de dilogo contiene ms

    de un grupo de Botones de opcin, cada grupo de stos debe tener el mismo valor dela propiedad group name. De lo contrario, todos los Botones de opcin formarnparte del mismo grupo. De forma alternativa, se pueden agrupar los Botones deopcin en un control Marco, que agrupa automticamente los Botones de opcincontenidos dentro del marco.

    RefEdit. Se usa cuando es necesario permitir que el usuario seleccione un rango deuna hoja de clculo.

    Barra de desplazamiento (ScrollBar). Es similar a un control Botn de nmero. Ladiferencia estriba en que el usuario puede desplazarse con el botn Barra dedesplazamiento para cambiar el valor del contrl en incrementos ms amplios. Dichocontrol es ms til para seleccionar un valor que se extiende a travs de un rangomuy amplio de posibles valores. 88

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    45/87

    Excel con VBA

    ISUAL BASIC PARA APLICACIONESUserFormsCONTROLES DISPONIBLES PARA EL USUARIO

    Botn de nmero (SpinButton). Permite al usuario seleccionar un valor haciendo

    clic sobre una de las dos flechas que contiene. Este control se usa a menudo enconjuncin con el control Cuadro de texto o el control Etiqueta, que presentan elvalor actual de un Control de nmero.

    Barra de tabulaciones (TabStrip). Es similar a un control Pgina mltiple, pero noes tan fcil de usar.

    Botn de alternar (ToggleButton). Posee dos estados: activado y desactivado. Alhacer clic sobre el mencionado botn, se alternan estos dos estados y el botn cambiade apariencia. Su valor puede ser o bien Verdadero (presionado) p bien Falso (no

    presionado).

    89

    Excel con VBA

    UserFormsAJUSTAR LOS CONTROLES DEL CUADRO DE DILOGO

    Despus de situar un control en un cuadro de dilogo, se puede mover y modificar su tamao usando las tcnicas del ratn estndar.Un UserForm puede contener lneas de divisin horizontales y verticales que ayudan a alinear los controles que se aaden. Cuando se aade o se mueve un control, se ajusta a la cuadrcula. Si no se quieren ver estas lneas se pueden desactivarseleccionando Herramientas Opciones en el Editor de VB. En el cuadro de dilogo Opciones se selecciona la ficha general y se establecen lasopciones deseadas en la seccin Opciones de la cuadricula.El men Formato de la ventana del Editor de VB proporciona varios comandos paraayudar a precisar la alineacin y el espacio de los controles en un cuadro de dilogo. Antes de usar estos comandos hay que seleccionar los controles con los que se quiere trabajar.

    90

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    46/87

    91

    Excel con VBA

    UserFormsAJUSTAR LOS CONTROLES DEL CUADRO DE DILOGO

    Excel con VBA

    UserFormsAJUSTAR LAS PROPIEDADES DEL CONTROL

    Se pueden cambiar las propiedades del control en el tiempo de diseo con la ventanade Propiedades, mientras se est configurando el cuadro de dilogo, o durante eltiempo de ejecucin, cuando el cuadro de dilogo se presenta al usuario. Se

    pueden usar instrucciones VBA para cambiar las propiedades del control en el

    tiempo de ejecucin.USAR LA VENTANA DE PROPIEDADES

    La ventana propiedades tiene dos fichas:

    La ficha alfabtica presenta las propiedades del objeto seleccionado en ordenalfabtico

    La ficha Por categoras las presenta agrupadas en categoras lgicasSi se seleccionan dos o ms controles a la vez, la ventana Propiedades despliega slo

    las propiedades comunes a los controles seleccionados.

    92

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    47/87

    93

    Excel con VBA

    UserFormsUSAR LA VENTANA DE PROPIEDADES

    Excel con VBA

    UserFormsUSAR LA VENTANA DE PROPIEDADES

    La mejor manera de aprender sobre diversas propiedades de un control es usar laAyuda en lnea. Simplemente se hace clic sobre una propiedad de la ventana dePropiedades y se presiona F1. Por ejemplo, la propiedad Alignment de un Botn deOpcin.

    94

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    48/87

    Excel con VBA

    UserFormsCAMBIAR EL ORDEN DE TABULACIONEl orden de tabulacin determina la secuencia en la que los controles se activan cuando elusuario presiona Tab o Mays-tab.Para establecer el orden de tabulacin de los controles seselecciona Ver Orden de tabulacin en el Editor de VB

    De forma alternativa, se puede establecer una posicin de control individual en el orden detabulacin, usando la ventana Propiedades. El primer control en el orden de tabulacin tiene

    una Propiedad TabIndex de 0. Cambiar esta propiedad puede afectar a otros controles. Si sequiere eliminar un control del orden de tabulacin, se establece su propiedad TabStop comoFalse.

    95

    Excel con VBA

    UserFormsESTABLECER TECLAS DE ACCESO DIRECTO

    Se puede asignar una tecla de aceleracin o tecla de acceso directo a la mayora delos controles de un cuadro de dilogo. Esto permite al usuario acceder al control

    presionando Alt-tecla de acceso directo. Para ello se usa la propiedad Acceleratorde la ventana propiedades.

    PROBAR UN UserForm

    Existen tres maneras de probar un UserForm sin tener que llamarlo desde unprocedimiento de VBA.

    Elegir el comando Ejecutar, Ejecutar Sub/UserForm

    Presionar F5

    Hacer clic sobre el botn Ejecutar Sub/UserForm en la barra de herramientasEstndar

    96

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    49/87

    97

    Excel con VBA

    UserFormsDESPLEGAR UN UserForm

    Sub MostrarDilogo()

    UserForm1().showEnd Sub

    CERRAR UN UserForm

    Unload UserForm1

    PROCEDIMINETOS DE CONTROLADOR DE EVENTO

    Cuando el usuario interacta con el cuadro de dilogo, mediante la seleccin de unelemento de un cuadro de lista, haciendo clic sobre un botn de comando y dems, se

    produce un evento a ocurrir. Por ejemplo, hacer clic sobre el Botn de comandopromueve el evento Clickpara dicho botn. La aplicacin necesita procedimientosque se ejecuten cuando estos eventos ocurran. Estos procedimiento se llamancontrolador de evento.

    Este procedimiento debe estar en un mdulode VBA, no en el mdulo del cdigo del

    UserForm.

    Excel con VBA

    UserFormsPROCEDIMINETOS DE CONTROLADOR DE EVENTO

    Los procedimientos de controlador de evento deben estar localizados en la ventanade cdigo del UserForm. Sin embargo, el procedimiento de controlador de evento

    puede llamar a cualquier procedimiento que est localizado en un mdulo VBAestndar.

    CREAR UN UserForm: Un ejemplo

    El ejemplo usa un UserForm para obtener dos tipo de informacin: el nombre y elsexo de una persona.

    Usa el control Cuadro de texto (TextBox) para obtener el nombre.

    Usa tres botones de opcin (OptionsButtons) para obtener el sexo (masculino,femenino o desconocido).

    La informacin se recoge en el cuadro de dilogo y luego se enva a la siguientefila en blanco de la hoja de clculo.

    98

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    50/87

    Excel con VBA

    UserFormsCREACIN DEL CUADRO DE DILOGO

    1) Abra un libro de trabajo nuevo

    2) Presionar Alt-F11 para activar el Editor de VB3) En la ventana Proyecto, seleccionar el proyecto del libro de trabajo y elegir

    insertar, UserForm para aadir un formulario vaco.

    4) Si la ventana propiedades no est visible, presionar F4.

    5) cambiar la propiedad Caption del UserForm (usando la ventana propiedades) aObtener nombre y sexo.

    6) Aadir un control Etiqueta (Label) y ajustar sus propiedades: Accelerator N,caption Nombre, TabIndex 0

    7) Aadir un control Cuadro de texto (TextBox) y ajustar sus propiedades: NameNombreTexto, TabIndex 1

    8) Aadir un control Marco (frame) y ajustar sus propiedades: Caption Sexo,

    TabIndex 2

    99

    Excel con VBA

    UserFormsCREACIN DEL CUADRO DE DILOGO

    9) Aadir un control Botn de opcin (OptionButtons) dentro del Marco y ajustar suspropiedades: Accelerator M, Caption Masculino, Name OpcinMasculino,TabIndex 0

    10) Aadir otro control Botn de opcin (OptionButtons) dentro del Marco y ajustarsus propiedades: Accelerator F, Caption Femenino, Name OpcinFemenino,TabIndex 1

    100

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    51/87

    Excel con VBA

    UserFormsCREACIN DEL CUADRO DE DILOGO

    11) Aadir otro control Botn de opcin (OptionButtons) dentro del Marco y ajustar

    sus propiedades: Accelerator D, Caption Desconocido, Name Opcindesconocido,TabIndex 2, Value True

    12) Aadir un control Botn de Comando (CommandButton) dentro del Marco yajustar sus propiedades como sigue: Caption Aceptar, Default True, NameBotnAceptar, TabIndex 3

    13) Aadir otro control Botn de Comando (CommandButton) dentro del Marco yajustar sus propiedades como sigue: Caption Cancelar, Cancel True, NameBotnCancelar, TabIndex 4

    101

    Excel con VBA

    UserFormsCREACIN DEL CUADRO DE DILOGO

    ESCRIBIR UN CDIGO PARA DESPLEGAR EL CUADRO DE DILOGO

    Ahora se debe aadir un Botn de Comando a la hoja de clculo (Cuadro decontroles). Este botn ejecuta un procedimiento que despliega el UserForm.

    1) Activar Excel

    2) activar la barra Cuadro de Controles

    3) Aadir un Botn de comando

    102

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    52/87

    Excel con VBA

    UserFormsESCRIBIR UN CDIGO PARA DESPLEGAR EL CUADRO DE DILOGO

    4) Hacer doble clic sobre el botn, esto activa el Editor de VB (especficamente, el

    mdulo de cdigo para la hoja de calculo se despliega, con un procedimientocontrolador de evento vaco para el Botn de Comando (CommandButton)de lahoja de Clculo)

    5) Aadir la instruccin UserForm1.Show al procedimiento

    Private Sub CommandButton1-Click()

    UserForm1.Show

    End Sub

    103

    Excel con VBA

    UserFormsPROBAR EL UserForm

    Al salir del modo de diseo (desactivarlo de la barra Cuadro de Controles) y hacerclic sobre el botn, se despliega el cuadro de dilogo:

    Como an no hemos creado ningn controlador de evento, slo podemos cerrar elcuadro de dilogo. 104

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    53/87

    Excel con VBA

    UserFormsAADIR PROCEDIMIENTOS DE CONTROLADOR DE EVENTO

    En esta seccin se explica cmo escribir procedimientos que controlan los eventos

    que ocurren cuando el cuadro de dilogo se ha desplegado.1) Activar el Editor de VB

    2) Hacer doble clic sobre el botn Cancelar. El Editor de VB activa la ventana deCdigo del UserForm y proporciona un procedimiento vaco llamadoBotnCancelar_Click

    3) Modificar el procedimiento como sigue:

    Private Sub Botncancelar_Click()

    Unload UserForm

    End Sub

    4) Presionar Mays-F7 para volver a desplegar el UserForm1

    5) Hacer doble click sobre el botn Aceptar e introducir el siguiente procedimiento(ste es el controlador de evento para el evento Click del Botn Aceptar)

    105

    Excel con VBA

    UserFormsAADIR PROCEDIMIENTOS DE CONTROLADOR DE EVENTO

    Private Sub BotnAceptar_Click()

    Sheets(Hoja1).Activate

    Next = Row = application.WorkSheetFunction.CountA(Range(A:A)) + 1

    Cells(NextRow, 1) = NombreTexto.text

    If OpcinMasculino Then Cells(NextRow, 2) = Masculino

    If OpcinFemenino Then Cells(NextRow, 2) = Femenino

    If OpcinDesconocido Then Cells(NextRow, 2) = Desconocido

    NombreTexto =

    OpcinDesconocido = true

    NombreTexto.SetFocus

    End Sub

    106

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    54/87

    107

    Excel con VBA

    UserFormsAADIR PROCEDIMIENTOS DE CONTROLADOR DE EVENTO

    Excel con VBA

    UserFormsVALIDAR LOS DATOSEste ejemplo no asegura que el usuario realmente introduce el nombre en el Cuadrode texto. El siguiente cdigo se inserta en el procedimiento BotnAceptar_Click()antes de que el texto se transfiera a la hoja de clculo.

    Asegurar que se ha introducido un nombreIf NombreTexto.Text = Then

    MsgBox Se debe introducir un nombre

    Exit Sub

    End If

    Con esto se asegura que el usuario ingresa un texto. Si este est vaco aparece unmensaje y la rutina termina.

    108

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    55/87

    Excel con VBA

    Parte 7:

    Controles

    109

    Excel con VBA

    PROPIEDADES COMUNES A TODOS LOS CONTROLES

    Categora aparienciaBackcolor y Forecolor: Color del fondo del control y color del texto.

    Caption: Informa el texto que aparece en el control.Picture: Indica el nombre de un fichero grfico que se mostrar como fondo del control.Categora comportamientoEnabled: Propiedad del tipo True/False que especifica si el control est activo o no en tiempo de ejecucin; un control no activo es visible pero el usuario no puede interactuar con l, y se visualiza con un color distinto. Visible: Otra propiedad True/False, que indica si el control est visible u oculto en tiempo de ejecucin.TabIndex: El orden por el cual nos movemos con la tecla TAB, entre los controles,se establece con esta propiedad. Es un valor numrico, 0, 1 ...TabStop: Es del tipo True/False y establece si un control puede ser accesible con lateca TAB.

    110

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    56/87

    Excel con VBA

    PROPIEDADES COMUNES A TODOS LOS CONTROLES

    Categora fuenteFont: Permite elegir el tipo, estilo, tamao, etc... de letra del texto mostrado por elcontrol.

    Categora posicinLeft y Top: La primera contiene la coordenada columna y la segunda la coordenadalnea de pantalla donde se sita el control.

    Width y Height: Cuando un control es redimensionable, esto es, que susdimensiones son variables, tendr estas dos propiedades que nos informan del anchoy la altura del control.

    EJEMPLO

    1) Inserte un formulario en l proyecto

    2) Inserte un botn de comando

    3) Haga doble click sobre el botn para acceder a la ventana de cdigo

    4) En el procedimiento de evento click aada las siguientes lneas de cdigo:

    111

    Excel con VBA

    PROPIEDADES COMUNES A TODOS LOS CONTROLESEJEMPLO

    Private Sub CommandButton_Click()

    CommandButton1_Height = UserForm1.Height / 2

    CommandButton1_Width = UserForm1.Width / 2

    CommandButton1_Left = UserForm1.Width / 4CommandButton1_Top = UserForm1.Height / 4

    CommandButton1_Caption = redimensionado

    End Sub

    5) Ejecute el procedimiento presionando la tecla F5 y observe como cambia el ttulodel control CommandButton y su tamao y posicin al hacer clic sobre l.

    112

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    57/87

    Excel con VBA

    EVENTOS COMUNES A TODOS LOS CONTROLESPara nombrar un evento correspondiente a un control, la nomenclatura es siempre lamisma:

    nombre_del_control.nombre_del_evento

    Command Button.Click

    Click: Se activa al hacer clic sobre el control, pero tambin al pulsar la barra deespacios o la tecla Enter si se trata de un botn CommandButton

    MouseMove: Se activa al mover el puntero del ratn por encima del control.

    EJEMPLO

    1) Acceda a la ventana de cdigo del control command Button del ejemplo anterior.

    2) Observe que en la parte superior de la ventana de cdigo hay dos listasdesplegables. La de la izquierda muestra el nombre del control CommandButton1 yes una lista de los controles del UserForm. La de la derecha muestra el nombre delevento Click y es una lista de todos los eventos del control que tenemosseleccionado.En la ventana de eleccin de eventos, desplegndola, elija el evento MouseMove.

    113

    114

    Excel con VBA

    EVENTOS COMUNES A TODOS LOS CONTROLES

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    58/87

    Excel con VBA

    EVENTOS COMUNES A TODOS LOS CONTROLES3) Escriba el cdigo necesario para que el evento quede como sigue:

    Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift AsInteger, ByVal X As Single, ByVal Y As Single)

    CommandButton1.Caption = "Ahora pasas por encima"

    End Sub

    4) Despliegue ahora la lista de controles y elija el objeto UserForm. En la lista deeventos del UserForm elija de nuevo MouseMove y escriba el cdigo siguiente:

    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer,ByVal X As Single, ByVal Y As Single)

    CommandButton1.Caption = "Desactivado"

    End Sub

    5) En un mdulo de VBA escriba el siguiente cdigo:

    Sub mostrar()

    UserForm1.Show

    End Sub115

    Excel con VBA

    EVENTOS COMUNES A TODOS LOS CONTROLES6) Ejecute el procedimiento Mostrar. Mueva el puntero del ratn por encima del controlsin hacer clic y observe como cambia el texto que muestra. Cuando el puntero abandonael rea del botn y se mueve por encima del UserForm se activa el evento MouseMovede ste y el ttulo del botn muestra el texto desactivado.

    MouseDown y MouseUp: El primer evento se activa al presionar uno de los botonesdel ratn y el segundo al liberarlo

    KyePress, KeyDown y KeyUp: Son eventos que relacionan un control que aceptaentrada de texto por parte del usuario (por ejemplo TextBox) con el teclado delordenador. Cuando el usuario presiona una tecla de tipo carcter se activa el eventoKeyPress. Si presiona una tecla especial, como puede ser la tecla Inicio o Enter, seactiva solo el evento KeyDown. Al soltar la tecla se activa KeyUp. Notemos que elevento KeyDown se activa para cualquier tecla, mientras KeyPress slo lo hace si latecla es de tipo carcter.

    DblClick: Se activa al hacer doble clic sobre el control.

    116

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    59/87

    Excel con VBA

    EJEMPLO DEL BOTN CHECKBOXDiseemos un UserForm de entrada de datos de los clientes de un hotel. Ha de contenerDNI, nombre da de llegada, habitacin doble (s/no), habitacin con bao completo (s/no), pensin completa (s/no), suplemento cama nio (s/no).El programa calcular el precio diario de la habitacin en base a una suma de conceptos.La habitacin tiene un recio de 5000 pts/da, y los precios de los suplementos son:Habitacin doble: 3000 pts/da, Con bao completo: 2000 pts/da, Pensin completa (por

    persona): 4500 pts/da, Cama suplementaria para nio: 1500 pts/da).Los pasos a seguir son:1) Disee un formulario com. se muestra a continuacin:

    117

    118

    Excel con VBA

    EJEMPLO DEL BOTN CHECKBOX

    2) Acceda a las propiedades Caption de los controles de forma que queden como en lapantalla anterior.

    3) Ponga la propiedad Visible del TextBox que muestra el resultado del clculo a False.Haga lo mismo con el correspondiente control Label.

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    60/87

    Excel con VBA

    EJEMPLO DEL BOTN CHECKBOX4) Acceda a la ventana del cdigo del botn Finalizar, evento Click, y escriba la instruccinEnd

    Private Sub CommandButton3_Click()

    End

    End Sub5) Acceda a la ventana de cdigo del botn Nuevo y djelo como sigue:Private Sub CommandButton2_Click()

    TextBox1 = ""TextBox2 = ""TextBox3 = "" Cambie el nombre de los HabDoble = false botones CheckBox,PensionCompleta = false

    HabDoble, PensionCompleta,CamaAdicional = falseBaoCompleto = false CamaAdicional,

    TextBox4.Visible = False BaoCompletoLabel4.Visible = FalseEnd Sub 119

    Excel con VBA

    EJEMPLO DEL BOTN CHECKBOX6) Acceda a la ventana de cdigo del botn Calcular y djelo como sigue:

    Private Sub CommandButton1_Click()

    Dim Precio As Integer If CamaAdicional = true ThenPrecio = Precio + 1500

    Precio = 5000 End IfIf HabDoble = true Then Precio = Precio + 3000 If BaoCompleto = true ThenIf PensionCompleta = true Then Precio = Precio + 2000

    Precio = Precio + 4500 End IfIf HabDoble = true Then TextBox4 = Precio

    TextBox4.Visible = TruePrecio = Precio + 4500 Label4.Visible = True

    End If End SubIf CamaAdicional = true Then

    Precio = Precio + 4500

    End If

    End If

    120

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    61/87

    Excel con VBA

    EJEMPLO DEL BOTN CHECKBOX6) En un mdulo de VBA escriba el siguiente cdigo:

    Sub Clientes()

    UserForm1.ShowEnd Sub

    7) Luego ejectelo

    121

    Excel con VBA

    EL CONTROL LISTBOXA continuacin se presentan algunos puntos a tener en cuenta cuando se trabaja concontroles de Cuadro de lista.

    Los elementos de un Cuadro de Lista se pueden recuperar desde un rango de celdas(especificadas por la propiedad RowSource) o pueden ser aadido usando un cdigo de VBA(y usando el mtodo AddItem).

    Un Cuadro de lista se puede configurar para permitir una seleccin de una celda o unaseleccin mltiple. Esto est determinado por la propiedad MultiSelect.

    No es posible desplegar un Cuadro de lista sin elementos seleccionados (la propiedadListIndex es -1). Sin embargo, una vez se ha seleccionado un elemento, no es posible noseleccionar ningn elemento.

    Un Cuadro de lista puede contener columnas mltiples (controladas por la propiedadColumnCount) e incluso un encabezado descriptivo (controlado por la propiedadColumnHeads).

    Los elementos de un Cuadro de lista se pueden presentar como Casillas de verificacin si sepermite una seleccin mltiple, o como Botones de opcin si se permite una seleccin de unasola celda. Esta operacin est controlada por la propiedad ListStyle.

    122

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    62/87

    Excel con VBA

    EL CONTROL LISTBOXAadir elementos al control Cuadro de lista

    Antes de desplegar un Userform que use un control Cuadro de lista, probablemente

    se necesite rellenar el mismo con elementos. Esto se debe realizar en tiempo dediseo, usando elementos guardados en un rango de hoja de clculo, o en tiempode ejecucin, usando VBA para aadir los elementos.

    Los ejemplos que veremos a continuacin suponen que:Se ha generado un cuadro de dilogo en un UserForm llamado UserForm1. Este cuadro de dilogo contiene un control de Cuadro de lista llamado ListBox1.

    El libro de trabajo contiene una hoja llamada Hoja1 y un rango A1:A12 quecontiene los elementos a desplegar en el Cuadro de lista.

    Aadir elementos a un Cuadro de lista en tiempo de diseo

    Para aadir elementos en tiempo de diseo los elementos deben estar guardados en

    en un rango de hoja de clculo. Se usa la propiedad RowSourcepara especificar elrango que contiene dichos elementos (HOJA1!A1:A2)

    123

    124

    Excel con VBA

    EL CONTROL LISTBOXAadir elementos a un Cuadro de lista en tiempo de diseo

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    63/87

    Excel con VBA

    EL CONTROL LISTBOXAadir elementos a un Cuadro de lista en tiempo de ejecucin

    Para aadir elementos a un Cuadro de lista en tiempo de ejecucin existen dos

    formas: Configurar la propiedad RowSource para una direccin de rango usando uncdigo.

    Escribir un cdigo que usa el mtodo AddItem para aadir los elementos al Cuadrode lista.

    UserForm1.ListBox1.RowSource = Hoja1!A1:A12

    Si los elementos no estn contenidos en un rango de hoja de clculo, se puedeescribir un cdigo VBA para rellenar el cuadro de lista antes de que aparezca elcuadro de dilogo (con el mtodo AddItem).

    125

    Excel con VBA

    EL CONTROL LISTBOXAadir elementos a un Cuadro de lista en tiempo de ejecucinSub ShowUserForm1()

    With UserForm1.ListBox1

    .RowSource =

    .AddItem Enero

    .AddItem Febrero

    .AddItem Marzo

    .AddItem Abril

    .AddItem Mayo

    .AddItem Junio

    .AddItem Julio

    .AddItem Agosto

    .AddItem Septiembre

    End With

    UserForm1. Show

    End Sub126

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    64/87

    Excel con VBA

    EL CONTROL LISTBOXAadir elementos a un Cuadro de lista en tiempo de ejecucin

    Tambin se pude usar el mtodo AddItem para recuperar elementos de un Cuadro de

    Lista a partir de un rango.

    For Row = 1 To 12

    UserForm1.ListBox1.AddItem Sheets(Hoja1).Cells(Row,1)

    Next Row

    Si los datos estn contenidos en una matriz de una dimensin meses, que contiene 12elementos, podemos escribir

    ListBox1.List = meses

    127

    Excel con VBA

    EL CONTROL LISTBOXSeleccin de las opciones en el ListBox

    La propiedad MultiSelect que en el momento de crear el control tiene el valor 0Single, que permite seleccionar slo una opcin, puede tomar los siguientesvalores:

    1-Simple: permite seleccionar ms de un elemento simplemente pulsando el botndel ratn sobre cada uno

    2-Extended: permite adems seleccionar un rango de la lista combinando la teclade maysculas con el botn del ratn. En este caso para seleccionar elementosaislados combinaremos la tecla Control con el ratn.

    Acceso a la opcin en el caso de seleccin simple

    Para determinar el elemento que se ha seleccionado, hay que acceder a la propiedadValue del Cuadro de lista.

    MsgBox ListBox1.Value

    Si se necesita saber la posicin del elemento seleccionado se puede acceder a lapropiedad ListIndex del Cuadro de lista.

    MsgBox Se ha seleccionado el elemento & ListBox1.ListIndex 128

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    65/87

    Excel con VBA

    EL CONTROL LISTBOXAcceso a las opciones en multiseleccin

    Cuando tengamos la multiseleccin activada (la propiedad MultiSelect es 1 2)

    podr haber ms de un elemento seleccionado, y las propiedades anteriores no sernadecuadas. Utilizaremos la propiedad Selected que es una matriz unidimensional deelementos tipo Boolean. El nmero de elementos es el mismo que el de la propiedadList.

    Si el tercer elemento est seleccionado, entonces el tercer elemento de Selectedtendr el valor True, en caso contrario valdr False. Tambin nos puede ser til la

    propiedad ListCount, que devuelve el nmero total de elementos de la lista.

    Crear un cuadro de lista con contenido variable

    Este ejemplo demuestra cmo crear un Cuadro de lista cuyo contenido cambia,dependiendo de la seleccin del usuario de un grupo de botones de opcin. El cuadro

    de lista obtiene los elementos de un rango de hoja de clculo. El procedimiento quecontrola el evento Clickde los controles de Botn de opcin simplemente establecela propiedad RowSource del Cuadro de lista en un rango diferente.

    129

    Excel con VBA

    EL CONTROL LISTBOXCrear un cuadro de lista con contenido variable

    Private Sub OpcionCoches_Click()

    ListBox1.RowSource = "Hoja1!Coches"

    End Sub

    Private Sub OpcionColores_Click()

    ListBox1.RowSource = "Hoja1!Colores"

    End Sub

    Private Sub OpcionMeses_Click()

    ListBox1.RowSource = "Hoja1!Meses"

    End Sub

    130

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    66/87

    132

    Excel con VBA

    EL CONTROL LISTBOXElaborar un Cuadro de lista desde otra lista

    A continuacin se muestra el procedimiento que se ejecuta cuando el usuario haceclic sobre el botn AadirPrivate Sub Aadir_Click()

    If ListBox1.ListIndex = -1 Then Exit SubListBox2.AddItem ListBox1.Value

    End Sub131

    Excel con VBA

    EL CONTROL LISTBOXElaborar un Cuadro de lista desde otra lista

    A continuacin se muestra el procedimiento que se ejecuta cuando el usuario haceclic sobre el botn Eliminar

    Private Sub Eliminar_Click()

    If ListBox2.ListIndex = -1 Then Exit Sub

    ListBox2.RemoveItem ListBox2.ListIndexEnd Sub

    Mover elementos de un cuadro de lista

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    67/87

    Excel con VBA

    EL CONTROL LISTBOXMover elementos de un cuadro de lista

    Private Sub MoverEncima_Click()

    With ListBox1ItemNum = .ListIndex

    If ItemNum > 0 Then

    TempItem = .List(ItemNum - 1)

    .List(ItemNum - 1) = .List(ItemNum)

    .List(ItemNum) = TempItem

    .ListIndex = .ListIndex - 1

    End If

    End With

    End Sub

    133

    Excel con VBA

    EL CONTROL LISTBOXMover elementos de un cuadro de lista

    Private Sub MoverDebajo_Click()

    With ListBox1ItemNum = .ListIndexIf ItemNum < .ListCount - 1 And ItemNum -1 Then 0 Then

    TempItem = .List(ItemNum +1).List(ItemNum +1 1) = .List(ItemNum).List(ItemNum) = TempItem.ListIndex = .ListIndex + 1

    End If

    End With

    End Sub

    134

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    68/87

    Excel con VBA

    EL CONTROL MULTIPAGEEl control Pgina Mltiple es muy til para cuadros de dilogo personalizados que

    deben presentar muchos controles. El mencionado control permite agrupar lasopciones y colocar cada grupo en una ficha aparte.

    Hay que tener en cuenta lo siguiente cuando se use este control: La ficha (o pgina) que se despliega al frente est determinada por la funcin Value el

    control.El valor 0 despliega la primera ficha, el 1 la segunda y as sucesivamente.

    De forma predeterminada, un control de Pgina Mltiple tiene dos pginas. Para aadir unanueva, se hace clic con el botn derecho del ratn sobre una ficha y se selecciona NuevaPgina desde el men contextual.

    Cuando se est trabajando con un control de Pgina Mltiple, basta con hacer clic sobre unaficha para establecer las propiedades de esa pgina en concreto. La ventana Propiedades

    pesenta las propiedades que se pueden ajustar.

    Puede ser difcil seleccionar el control de Pgina mltiple, porque al hacer clic sobre elmismo, se selecciona toda la pgina. Para seleccionar el control propiamente dicho se puedeusar la tecla Tab para realizar un recorrido en crculo por todos los controles. Tambin se

    puede seleccionar el control Pgina mltiple desde la lista desplegable de la ventanaPropiedades.

    135

    Excel con VBA

    EL CONTROL MULTIPAGE Si el control pgina Mltiple consta de muchas fichas, se puede establecer su

    propiedad multiRow en True para desplegar las fichas en ms de una fila.

    Si se prefiere se pueden desplegar botones en lugar de fichas. Para ello se cambiala propiedad Style a 1.

    La propiedad TabOrientation determina la localizacin de las fichas en el controlPgina Mltiple

    136

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    69/87

    Excel con VBA

    CONTROL DE ERRORES DE EJECUCIN Los errores de ejecucin de tipo externo suelen interrumpir de form sbita la

    ejecucin normal del programa. Dependiendo del tipo de error, o bien VBA o bienWindows mostrarn un mensaje de error que no siempre ser comprensible para elusuario.Veremos ejemplos de cmo hacer que nuestro programa controle estoserrores sin terminar de forma anormal y generando nuestros propios mensajes derror para el usuario.

    EJEMPLOSub grabar()

    On Error goTo Problemas

    Application.SaveWorkSpace

    On Error GoTo 0

    Exit Sub

    Problemas:

    MsgBox operacin cancelada

    Resume Next

    EndSub137

    Excel con VBA

    CONTROL DE ERRORES DE EJECUCIN El mtodo SaveWorkspace del objeto Application muestra el cuadro de dilogo

    estndar Guardar Como

    La instruccin On error GoTo activa el control de los errores de ejecucin. Todoslos errores ocurridos en la lneas uqe siguen a esta instruccin desviarn el flujo deejecucin a un bloque de cdigo de tratamiento de errores. El control de errores se

    interrumpe con la instruccin On Error GoTo 0.El esquema a seguir es:Sub nombre_del_procedimiento()

    On Error GoTo Etiqueta Inicio del control

    (Instrucciones con control de errores)On errorGoTo 0 Fin del controlExit Sub Fuerza el final del procedimiento

    Etiqueta: nicio del bloque de tratamiento de errores

    (Acciones a seguir en caso de error)

    Resume Next Fin el bloque

    End Sub138

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    70/87

    Excel con VBA

    CONTROL DE ERRORES DE EJECUCIN Tambin podemos ignorar los errores producidos en un cierto bloque de cdigo;

    dicho en otras palabras, las acciones a realizar en caso de error no existen, pero noqueremos que el programa se detenga de forma anormal. En este caso el esquema aseguir es:

    On error Resume next Inicio del control

    (Instrcciones con control de errores)

    On Error GoTo 0 Fin del control

    Cualquier error en las instrucciones que tienen el control de errores activado serignorado, y la ejecucin seguir por la siguiente instruccin. Obviamente esteesquema es ms cmo pero ms peligroso.

    139

    Excel con VBA

    EL CONTROL RefEditA continuacin se presentan algunos temas a tener en cuenta cuando se use el control

    REfEdit:

    El control REfEdit devuelve una cadena de texto que representa una direccin derango. Se puede convertir esta cadena en un objeto Range mediante el uso de unainstruccin como la siguiente:

    Set UserRange = Range(RefEdit1.Text)

    Desplegar la seleccin de rango actual es una buena prctica para inicializar elcontrol RefEdit. Esto se puede hacer con la ayuda del procedimientoUserForm_Initialize usando una instruccin como la siguiente.

    RefEdit1.Text = ActiveWindow.RangeSelection.Address

    No hay que dar por supuesto que el control RefEdit siempre va a devolver siemprela direccin de rango vlido, por lo tanto debemos verificar que sea realmentevlido.

    140

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    71/87

    Excel con VBA

    EL CONTROL RefEditOn Error Resume Next

    Set UserRange = Range(RefEdit1.Text)

    If Err 0 ThenMsgBox El rango seleccionado no es vlidoRefEdit1.SetFocusOn error GoTo 0Exit Sub

    End If

    Si el rango seleccionado correponde aun hoja diferente de la activa deberindicarlo de la siguiente forma:

    Hoja2!A1:A20

    141

    Excel con VBA

    EL CONTROL RefEditEJEMPLO

    142

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    72/87

    Excel con VBA

    EL CONTROL RefEditEJEMPLOSub Clculo()

    UserForm1.ShowEnd Sub

    Private Sub CommandButton1_Click()

    RefEdit1.Text = ""

    TextBox1 = ""

    End Sub

    Private Sub CommandButton2_Click()

    End

    End Sub

    143

    Excel con VBA

    EL CONTROL RefEditEJEMPLO

    Private Sub Opcin_Producto_Click() Private Sub Opcin_Suma_Click()Set UserRange = Range(RefEdit1.Text) Set UserRange = Range(RefEdit1.Text)

    prod = 1 Sum = 0

    For Each cell In UserRange For Each cell In UserRangeSum = Sum + cell.Value

    prod = prod * cell.Value Next cellNext cell TextBox1 = SumTextBox1 = prod End Sub

    End Sub

    144

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    73/87

    Excel con VBA

    Parte 8:

    Rangos

    145

    Excel con VBA

    TRABAJAR CON RANGOSCopiar un rango (macro)Sub Copiar_Rango()

    Range("A4:A8").Select

    Selection.Copy

    Range("C4").Select

    ActiveSheet.Paste

    End Sub

    Se puede simplificar de la siguiente manera:

    Sub Copiar_Rango()

    Range("A4:A8").Copy Range("C4")

    End Sub

    Ambas macros suponen quest activa una hoja de clculo y que la operacin tienelugar en la hoja de clculo activa.

    146

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    74/87

    Excel con VBA

    TRABAJAR CON RANGOSCopiar un rangoPara copiar un rango a una hoja de clculo o libro diferente , simplemente se

    cualifica la referencia del rango para el destino. El siguiente ejemplo copia unrango desde la Hoja1 del libro Archivo1.xls, a la Hoja2 de libro Archivo2.xls.

    Sub Copiar_Rango()

    Set Rango1 =WorkBooks(Archivo1.xls).Sheets(Hoja1).Range(A1:A8)

    Set Rango2 =WorkBooks(Archivo2.xls).Sheets(Hoja2).Range(C4)

    Rango1.Copy Rango2

    End Sub

    Mover un rangoSub Mover_Rango()

    Range(A1:A8).Cut Range(C4)

    End Sub

    147

    Excel con VBA

    TRABAJAR CON RANGOSCopiar un rango de tamao variableEn muchos casos, es necesario copiar un rango de celdas, pero no se conocen

    exactamente las dimensiones de la fila y de la columna. Por ejemplo, se puedetener libro de trabajo que realiza el seguimiento de ventas semanales. El nmerode filas cambia semanalmente a medida que se introducen nuevos datos.

    La siguiente macro demuestra cmo copiar un rango desde la Hoja! A la Hoja2(comenzando por la celda A1). La macro usa la propiedad CurrentRegion quedevuelve un objeto Range que corresponde al bloque de celdas alrededor de unacelda concreta.

    Sub Copiar_Rango_Variable()

    Range(A1).CurrentRegion.Copy Sheets(Hoja2).Range(A1)

    End Sub

    148

  • 8/4/2019 EXCEL Con VISUAL BASIC Para Aplicaciones

    75/87

    Excel con VBA

    TRABAJAR CON RANGOSSeleccionar rangos mltiplesSub Seleccin_Mltiple()

    Range("A4:A8,C4:C9,B10:B13").SelectEnd Sub

    Ejemplo de selccin de rangosLa siguiente instruccin selecciona un rango desde la celda activa hasta la ltima

    celda no vaca:

    Range(ActiveCell, Activecell.End(xlDown)).select

    Tres constantes simulan las combinaciones de teclas en las otras direcciones: xlUp,xlToLeft y xlToRight.

    149

    Excel con VBA

    TRABAJAR CON RANGOSEjemplo de selccin de rangosSub Seleccin_Regin_Actual()

    ActiveCell.CurrentRegion.Select

    End Sub

    El siguiente procedimiento crea un objeto Range y despus aplica el formato alrango.

    Sub Formato_Regin_Actual()

    Set WorkRange = ActiveCell.CurrentRegion.Select

    WorkRange.Font.Bold = True

    End Sub

    150