Está en la página 1de 44

ALenM_

MACROS EN EXCEL
- MONOGRAFA Alcides J. Len Mndez Centro de Investigaciones Hidrulicas Instituto Superior Politcnico Jos Antonio Echeverra

Cujae, 2003

ALenM_

ALenM_

I. INTRODUCCIN: EXCEL, BASIC y VISUAL BASIC...........................................2 II. MACROS ......................................................................................................................4 III. DOS PILARES: Excel + Visual Basic...................................................................5 IV. ALGO MS SOBRE LOS CONTROLES............................................................10 V. EL DIMENSIONAMIENTO Y EL FORMATEO. ...................................................15 VI. PROCEDIMIENTOS Y FUNCIONES....................................................................22 VII. COMANDOS CONDICIONALES MS FRECUENTES..................................23 VIII. FUNCIONES MAS TILES DEL VB..................................................................24 IX. OPERADORES........................................................................................................29 X. Colores en VB. .........................................................................................................36 XI. MENSAJES...............................................................................................................37 XII. DEPURACIN.........................................................................................................39 XIII. EJEMPLOS. ...........................................................................................................40

ALenM_

ii

ALenM_

I. INTRODUCCIN: EXCEL, BASIC y VISUAL BASIC. El EXECEL es una de las Hojas de Clculo ms populares. Desarrollada por Microsoft ha avanzado en cada versin tanto en posibilidades como en flexibilidades. Una de ellas, el empleo de las MACROS programadas en Visual Basic, la convierte en una poderosa arma para la solucin de los problemas comunes de ingeniera. El lenguaje Basic fue diseado para principiantes. Es un lenguaje estrictamente basado en texto. Su evolucin ha transcurrido durante ms de 35 aos. Microsoft no creo el VB directamente del lenguaje original. Su nacimiento implic versiones tales como: N88Basic, BASICA, MBasic, QuickBasic, GWBasic y otras. El lenguaje BASIC interpretado se mantuvo en todas las versiones en oposicin al compilado. En tanto que QBASIC y las otras versiones son lenguajes basados en texto el VB es un lenguaje grfico, interpretado y compilado. El empleo de hojas de clculo EXCEL con apoyo de Visual Basic crea una plataforma de programacin que es fcil, muy ejecutiva y que tiene un soporte que se encuentra en casi cualquier PC moderna, que sea compatible con los productos MS. El Visual Basic se emplea en el Excel a travs de MACROS utilizando para ello SubProgramas que enlazan la hoja o el libro EXCEL con las MACROS correspondientes. De esta forma el nmero que aparece en una celda de una hoja puede ser el resultado de un complejo programa estructurado en VB, totalmente invisible para el usuario.

Fig. 1 Hoja Excel para un clculo bsico

ALenM_

ALenM_

Fig. 2 SubPrograma para el clculo de los resultados que aparecen en la figura anterior

Es importante declarar aqu que la estrategia de programacin del VB en el ambiente Excel difiere bastante de la programacin de un algoritmo en el ambiente VB. Algunos trminos para inicializar al nuevo usuario de esta tcnica en los vocabularios que aqu se emplean son:. Cdigo Error es el nombre para el conjunto de instrucciones de un programa. es una pifia en el programa que impide que el programa calcule como es debido. Se resuelve mediante la depuracin de errores. persona que utiliza el programa. persona que realiza el programa y que puede ser su usuario. sistema de monitoreo interactivo que se puede activar o no dentro del VB y que ayuda a localizar las instrucciones con errores. es el trmino empleado para actualizar un programa despus que este est en uso.

Usuario Programador Depurador

Mantenimiento

ALenM_

ALenM_

II. MACROS Conjunto de instrucciones que se disean por el programador y se ejecutan o no a voluntad. Se llaman en el Men Herramientas. La opcin Macros abre la macro para visualizarla La opcin Grabar graba la macro. Primera via. Para crearla. 1. En una hoja Excel en construccin definir la secuencia de pasos a grabar en la macro. 2. Ir a grabar Macro. Ponerle un nombre y seleccionar (opcional) el mtodo abreviado para invocarla. 3. Hacer los pasos uno a uno 4. Parar la grabacin en el men Macro. Para ejecutarla. 1. Si se selecciono el mtodo abreviado presionar CTRL+Tecla 2. Si no se opto por este mtodo ir al men Macro optar por Macros, seleccionar la macro a ejecutar y ejecutarla. Otra va es ALT+ F8. 3. Otra va es asignar la Macro a un botn. 3.1. Invocar el Men VER Barra de herramientas Formulario. 3.2. Seleccionar el botn adecuado (BOTON). Dibujarlo fuera. 3.3. Asignar la Macro al botn. Ejemplo: Cambia de cualquier font y color a Arial 14/Azul/Negritas.
Sub Arial_14_Blue_Negras() 4

ALenM_

ALenM_ ' '

With Selection.Font .Name = "Arial" .Size = 14 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 40 End With Selection.Font.Bold = True Selection.Font.ColorIndex = 5 End Sub

UNA BARRA DE HERRAMIENTAS VerBara de HerramientasPersonalizar Barra de HerramientasNuevanombre de la barra Ya la barra esta creada, supongase que se llama MACROS VerBara de HerramientasPersonalizar Barra de herramientasComandosCategoria: MacrosPersonalizar botn se arrastra hasta la barra MACROS o hasta cualquier otra barra del Menu que debe estar abierta Clic izquierdo en el boton y se le asigna a una macro ya grabada. Segunda Va. En esta va se programa la macro que uno desee, no importa la complejidad del algoritmo. Los pasos son: 1. Abrir el cuadro de controles. 2. Crear los botones necesarios. 3. Abrir cada botn con doble Clic para ir a la programacin. 4. Programar con el Visual Basic, lo necesario. A partir de este momento el documento ampliar todo lo concerniente a esta opcin. III. DOS PILARES: Excel + Visual Basic. El objetivo al emprender este camino es: resolver un algoritmo que por las vas normales del Excel no puede solucionarse. Es importante haber agotado las fortalezas del Excel en la solucin de problemas de ingeniera (Solver, referencias cruzadas, decisiones lgicas ...).

ALenM_

ALenM_

Se debe analizar previamente y aceptar que el ambiente conveniente para la solucin es el dado por la hoja o libro Excel. Esta va tiene tres formas primarias de intercambiar valores de una variable entre el Excel y el VB: Nombre de la variable del VB = Cells(Col, Fila) del Excel para asignar el valor que este en esa ubicacin Cells(Col, Fila) del Excel = valor generado desde el VB donde valor es una variable o una constante que aparece en esa ubicacin. Si es un texto va entre comillas. Asignar el valor a travs de la propiedad LINK CELL de algunos de los botones del VB disponibles en Excel para programar MACROS. Estas formas de intercambio de valores y las propias fortalezas del VB y el Excel para programar soluciones hacen que el diseo de la solucin de un problema deba estudiarse profundamente asignndole a cada pilar la funcin que mejor pueda ejecutar. Aunque los ejemplos no pueden universalizarse, a continuacin algunos de ellos para tratar as de ir introduciendo estas ideas en los futuros programadores: Ejemplo 1. De la fila 11 a la fila 20 y en la columna A de una hoja Excel aparece la variable h1, en la columna J debe confirmarse si ella cumple con la restriccin h1 valor, donde valor es un nmero o una formulacin matemtica cualquiera. La solucin puede implementarse en el Excel fcilmente utilizando las decisiones lgicas.

ALenM_

ALenM_

Ejemplo 2. Se desea programar una funcin Spline Cbica para interpolar dentro de un conjunto de valores datos. Los datos aparecen en las columnas A y B. Se ha empleado para esto una Macro que esta programada y responde al botn Interpolacin. Por lo complejo del poceso se ha decidido emplear la programacin en VB, mientras que los resultados se ven en un grafico tpico de Excel.

A continuacin lo programado:
Private Sub cmdInterpol_Click() Dim ND As Byte Dim x(100) As Double, y(100) As Double Dim s(100)As Double, t(100) As Double, h(100) As Double Dim m(100) As Double Dim yy(100) As Double Dim b(100) As Double, c(100) As Double, d(100) As Double Dim xp As Double xp = txtX.Value ND = txtND.Value For i = 1 To ND x(i) = Cells((4 + i - 1), 1) y(i) = Cells((4 + i - 1), 2) Next i txtY.Value = " " si = 0 v=0 i=1 Do While i <= ND If xp < x(1) Then si = -1 End If If xp > x(ND) Then si = 1 End If If xp >= x(i) Then If xp <= x(i + 1) Then si = 0 v=i

ALenM_

ALenM_ End If End If i=i+1 Loop For i = 1 To (ND - 1) h(i) = x(i + 1) - x(i) Next i i=1 Do While i < (ND) m(i) = (y(i + 1) - y(i)) / h(i) If i > 1 Then If i = 2 Then t(2) = m(2) - m(1) yy(2) = 2 * (h(1) + h(2)) Else t(i) = (m(i) - m(i - 1)) - (h(i - 1) * t(i - 1)) / yy(i - 1) yy(i) = 2 * (h(i - 1) + h(i) - (h(i - 1)) ^ 0.5 / yy(i - 1)) End If End If i=i+1 Loop s(1) = 0 s(ND) = 0 s(ND - 1) = t(ND - 1) / yy(ND - 1) For j = (ND - 2) To 1 Step -2 s(j) = (t(j) - h(j) * s(j + 1)) / yy(j) Next j For i = 1 To (ND - 1) b(i) = m(i) - (s(i + 1) + 2 * s(i)) * h(i) c(i) = 3 * s(i) d(i) = (s(i + 1) - s(i)) / h(i) Next i Select Case si Case Is = -1 yp = 0 respuesta = MsgBox("Valor fuera de rango", vbOKOnly + vbExclamation, "Informacin") Case Is = 1 yp = 0 respuesta = MsgBox("Valor fuera de rango", vbOKOnly + vbExclamation, "Informacin") End Select yp = y(v) + (xp - x(v)) * (b(v) + (xp - x(v)) * (c(v) + d(v) * (xp - x(v)))) txtY.Value = yp Cells(1, 9) = xp Cells(1, 10) = yp End Sub Private Sub lblNumeroDatos_Click() End Sub Private Sub txtND_Change() End Sub Private Sub txtX_Change() txtY.Value = " " End Sub Private Sub txtY_Change() End Sub

ALenM_

ALenM_

Como se pudo observar en el ejemplo anterior en la hoja se emplearon diferentes herramientas para la programacin en VB. Ellas se obtienen de la Barra de herramientas del Excel activando el Cuadro de Controles.

Fig. 3 Opciones de Herramientas.

El cuadro de herramientas es una serie de controles a colocar en la hoja Excel. La identificacin de los controles en el momento de editarlos se le antepone un prefijo que lo identifique.
lst cmd lbl ctn shp Cuadro de Lista Boton de Comando Label Control de Numero Imagen chk cbo opt vsb o hsb txt Casilla de Verificacin Cuadro Combinado Boton de Opcin Barra de Desplazamiento Cuadro de texto

Los controles tienen propiedades. Las ms comunes son:


Alignment BackColor BorderStyle Caption Enabled Font ForeColor Height Determina la justificacin del texto del control Color de segundo plano del control Determina el color de borde Texto que muestra el control al usuario Permite que el control responda o no a eventos. (False) no responde y se apaga. Fuente del control Color del primer plano Altura del control 9

ALenM_

ALenM_ Distancia entre extremo izquierdo del control a extremo izquierdo del contenedor Forma del cursor Nombre del control. Es el que debe llevar prefijo de identificacin. Texto que aparece cuando se coloca el cursor del ratn sobre el control Distancia extremo superior del control a extremo superior del contenedor. Si estar o no visible en la ejecucin. Ancho del control

Left MousePointer Name ToolTipText Top Visible Width

IV. ALGO MS SOBRE LOS CONTROLES. Control: Label Escribe textos, por ejemplo cuando quiera que el usuario escriba un valor en un control se escribe una etiqueta indicndolo. Tambin para avisos, ttulos, etc. NO se puede alterar en tiempo de ejecucin. Propiedades ms importantes.
Autosize Wordwrap (true) el texto se expande horizontalmente (true) se conserva el ancho de la etiqueta.

Control: TextBox Se emplea cuando se requiere que el usuario escriba algo como respuesta a una solicitud. Puede aparecer o no con un valor predeterminado. NO son buenos para respuestas Verdadero/Falso. Debe usarse Label para orientar lo que debe escribir el usuario. Propiedades ms importantes.
Locked MaxLength MultiLine PasswordChar ScrollBars Text (true) el usuario no puede cambiar el valor predeterminado Nmero mximo de caracteres que aceptar el cuadro. 0 indica cualquier longitud. (true) si lleva mas de una lnea de textos Designa un carcter que ocultar lo escrito por el usuario (1) barra horizontal, (2) vertical, (3) ambas. Multiline debe estar en true. Establece o devuelve el texto de control.

S/No

ni

Ejemplo:
Private Sub txtTexto1_Change() Cells(10, 1) = txtTexto1.Text End Sub

Text Text CommandB

Escribe en la celda A10 lo que se escriba en el cuadro de texto.

ALenM_

10

ALenM_

Control: CommandButton Botn para indicar una respuesta, para programar un algoritmo, etc. Detrs de este botn se programo el algoritmo de clculo del Spline que se mostr anteriormente. Propiedades ms importantes.
Accelerator Cancel Caption Default Picture Style Una letra que combinada que acciona la tecla. Por ejemplo: ALT+A (true) al oprimir ESC da la misma respuesta Nombre del botn. Si se antecede una letra del nombre con & esta ser la letra caliente Determina si el botn responde a la tecla entrar (1) para que aparezca una imagen en el botn Si el botn puede desplegar una imagen. 1 -Graphical

Control: Casilla de Verificacin Ofrece una opcin para el usuario. Deben aparecer con varias ms. Con ella se activa o desactivan opciones. Pueden activarse ms de una a la vez. Si VALUE es TRUE est seleccionada pero si VALUE es FALSE no lo est. Ejemplo;
If (chkCasilla.Value = Verdadero) Then Codigo Else Codigo End If

Control: Botones de Opcin Ofrece una opcin para el usuario, entre varias. Si VALUE es False no est seleccionada. Se le pueden asignar False a todos, en tiempo de ejecucin, en las Sub que se deseen. NUNCA coloque un solo botn ya que el usuario podr seleccionarlo pero NO revertir el estado a no ser que lo programe en tiempo de ejecucin.

ALenM_

11

ALenM_ Private Sub optBoton1_Click() End Sub Private Sub optBoton2_Click() End Sub Private Sub optBoton3_Click() End Sub

En este ejemplo los botones se linkearon (LinkedCeld) a las celdas A2, A5 y A8 respectivamente. Al marcar un automticamente. botn los dems se desmarcan

Es importante inicializar los botones en FALSE al comenzar la ejecucin.


Esto debe hacerse en la Sub principal del grupo de Sub que resuelvan el algoritmo. Control: Cuadro de Lista Proporciona al usuario una manera de seleccionar uno o ms elementos de una lista. No se puede escribir en l. El inicio se hace mejor con WorkSheet_Activate()

El inicio del Libro se hace con WorkbooK_Open


[En ThisWorkbook] Private Sub WorkBook_Open() Sheets("Cuadro de Lista").Select End Sub [En la Hoja Cuadro de Lista] Private Sub WorkSheet_Activate() If lstCuadro1.ListCount < 3 Then lstCuadro1.AddItem "Chezy" lstCuadro1.AddItem "Manning" lstCuadro1.AddItem "Pavlovsky" End If End Sub Private Sub lstCuadro1_Click() End Sub

VB copia a lstCuadro1.Text el elemento seleccionado en el cuadro.


Private Sub lstLista1_Click() Cells(10, 1) = lstLista1.Text End Sub

En lstCuadro1.ListIndex aparece el nmero de orden de la seleccin a partir de 0. Para borrar elementos de la lista: lstCuadro1.RemoveItem 0 Para borrar TODOS los elementos de la lista: lstCuadro1.Clear
ALenM_ 12

ALenM_

Para saber cuantos elementos hay en la lista: lstCuadro1.ListCount


Private Sub Worksheet_Activate() If lstCuadro1.ListCount < 3 Then lstCuadro1.AddItem "Chezy" lstCuadro1.AddItem "Manning" lstCuadro1.AddItem "Pavlovsky" End If End Sub Private Sub lstCuadro1_Click() If lstCuadro1.Text = "Chezy" Then Cells(4, 6) = "Se seleccion la opcin Chezy" ElseIf lstCuadro1.Text = "Manning" Then Cells(4, 6) = "Se seleccion la opcin Manning" ElseIf lstCuadro1.Text = "Pavlovsky" Then Cells(4, 6) = "Se seleccion la opcin Pavlovsky" End If If lstCuadro1.ListCount > 3 Then lstCuadro1.Clear lstCuadro1.AddItem "Chezy" lstCuadro1.AddItem "Manning" lstCuadro1.AddItem "Pavlovsky" End If End Sub

Nota: En este cuadro se activo ListStyle (1). Si lo escrito es mayor que el tamao del cuadro automticamente se activan las flechas de movimiento necesarias. Control: Cuadro Combinado El cuadro parece y opera como un cuadro de lista simple. Los usuarios pueden seleccionar alguno de los valores o escribir otros. Su diferencia radica en cmo aparecen y cmo permite la seleccin y la introduccin. Hay dos tipos de estilo (0) y (2). El predeterminado es (0) Dropdown Combo. La lista desplegable solo ocupa un pequeo espacio hasta que el usuario apriete la flecha de la derecha ver los elementos de la lista y podr seleccionar uno.

VB copia a cboListaCombinada1.Text o en cboListaCombinada1.Value el


elemento seleccionado en el cuadro.
Private Sub Worksheet_Activate() If cboCuadro1.ListCount < 3 Then cboCuadro1.AddItem "Chezy" cboCuadro1.AddItem "Manning" 13

ALenM_

ALenM_ cboCuadro1.AddItem "Pavlovsky" End If End Sub Private Sub cboCuadro1_Change() If cboCuadro1.Text = "Chezy" Then Cells(4, 6) = "Se seleccion la opcin Chezy" ElseIf cboCuadro1.Text = "Manning" Then Cells(4, 6) = "Se seleccion la opcin Manning" ElseIf cboCuadro1.Text = "Pavlovsky" Then Cells(4, 6) = "Se seleccion la opcin Pavlovsky" Else Cells(4, 6) = "No se ha seleccionado todava" End If If cboCuadro1.ListCount > 3 Then cboCuadro1.Clear cboCuadro1.AddItem "Chezy" cboCuadro1.AddItem "Manning" cboCuadro1.AddItem "Pavlovsky" End If End Sub Private Sub cboListaCombinada1_Change() End Sub

En ListIndex aparece en nmero de orden de la seleccin a partir de cero. Control: SpinButton Puede ser Vertical u Horizontal. En la propiedad VALUE aparece el nmero de veces que se le aprieta a un lado o al otro. En Max y Min sus lmites que pueden ser negativos. Control: Barra de Desplazamiento Puede ser Vertical u Horizontal. En la propiedad VALUE aparece el nmero de veces que se le aprieta a un lado o al otro. En Max y Min sus lmites que pueden ser negativos. En SmallChange el cambio por cada toque de tecla (de 1 en 1 es el implcito) y en LargeChange el cambio por cada toque dentro del rea de desplazamiento. La lgica indica que SmallChange<LargeChange y mltiplos de la diferencia Max-Min. Su rango predeterminado es desde 32767 hasta +32767. Eventos comunes de control para todos los botones.
Activate Click DblClick Deactivate Initialize Se dispara cuando un formulario se convierte en activo, al hacer clic o seleccionarlo. Se dispara cuando se hace clic en l. Se dispara cuando se hace doble clic en l. Se dispara cuando el formulario deja de ser activo Se dispara cuando el formulario se genera por vez primera

ALenM_

14

ALenM_ Se dispara cuando el formulario se carga en memoria Se dispara cuando se debe redibujar todo Se dispara cuando el usuario cambia el tamao del formulario Se dispara cuando el formulario se destruye Se dispara poco antes de que el formulario se decargue Se dispara cuando se cambia de texto

Load Paint Resize Terminate Unload Change

V. EL DIMENSIONAMIENTO Y EL FORMATEO. La disponibilidad de una variable, constante, o procedimiento para ser usado por otro procedimiento es llamado alcance. Hay tres niveles de alcance: nivel de procedimiento, nivel de mdulo privado y nivel de mdulo pblico. El alcance de una variable se determina cuando se declara. Es aconsejable declarar todas las variables explcitamente para evitar errores de conflicto de nombres entre variables que tiene alcances distintos. Una variable o constante definida desde dentro de un procedimiento no es visible fuera de ese procedimiento. Las variables declaradas con la instruccin Dim en la seccin Declarations tienen un alcance privado Dim nombrevariable[([subscriptos])] [As tipo] [, nombrevariable[([subscriptos])] [As tipo]] . . . En la sintaxis de la instruccin Dim, la palabra Dim es una palabra clave exigida. El nico elemento necesario es nombrevariable (el nombre de la variable). Por ejemplo, la siguiente instruccin crea tres variables: Var1, Var2 y Var3. Estas variables se declaran automticamente como Variant.
Dim Var1, Var2, var3

El siguiente ejemplo declara una variable como String. Al incluir un tipo de datos se ahorra memoria y se pueden evitar errores en el cdigo.
Dim MiRespuesta As String

Para declarar varias variables en una instruccin, debe incluirse el tipo de


datos para cada variable. Las variables declaradas sin un tipo de datos se declaran automticamente como Variant. En la siguiente instruccin, a x e y se les asigna el tipo de datos Variant. Slo a z se le asigna el tipo de datos Integer.
Dim x, y, z As Integer Dim intX As Integer, intY As Integer, intZ As Integer

Si se declara una variable matriz, deben incluirse los parntesis. Los subscriptos son opcionales. La siguiente instruccin define las dimensiones de matrices.

ALenM_

15

ALenM_ Dim Dim Dim Dim h1P(16), h1L(14) As Double hL(12) As Single hP(16) As Double ar(24) As Double

Por ejemplo, para almacenar los gastos diarios de todos los das del ao se puede declarar una variable matriz con 365 elementos, mejor que declarar 365 variables. Cada elemento de una matriz contiene un valor. La siguiente instruccin declara la variable matriz Gastos con 365 elementos. Si no se especifica lo contrario, el ndice de una matriz comienza por el cero, con lo que el lmite superior de la matriz es 364 en vez de 365.
Dim Gastos(364) As Currency

Para dar valor a un elemento individual, es preciso especificar el ndice del elemento. El siguiente ejemplo asigna un valor inicial de 20 a todos los elementos de la matriz.
Sub LlenarMatriz() Dim Gastos(364) As Currency Dim intI As Integer For intI = 0 to 364 Gastos(intI) = 20 Next End Sub

MATRIZ FIJA: En la siguiente lnea de cdigo se declara como matriz Integer una matriz de tamao fijo con 5 filas y 5 columnas:
Dim MiMatriz(5, 5) As Integer

MATRIZ DINMICA: Al declarar una matriz dinmica se puede cambiar el tamao de una matriz mientras que el cdigo se est ejecutando. Para declarar una matriz dinmica se usan las instrucciones Static, Dim, Private, o Public, dejando los parntesis vacos, tal y como se muestra en el siguiente ejemplo.
Dim MatrizSingle() As Single

En el siguiente ejemplo, la instruccin Option Base cambia el ndice del primer elemento y la instruccin Dim declara la variable matriz Gastos con 365 elementos.
Option Base 1 Dim Gastos(365) As Currency

ALenM_

16

ALenM_

Tambin se puede fijar de forma explcita el lmite inferior de una matriz mediante el uso de la clusula To tal y como muestra el siguiente ejemplo.
Dim Gastos(1 To 365) As Currency Dim strDiaSemana(7 To 13) As String Dim h1P(0 To 5) As Integer Dim dal(-5 To 5) As Integer

Hay dos formas de crear matrices de valores Variant. Una forma consiste en declarar una matriz como del tipo de datos Variant, tal y como muestra el siguiente ejemplo:
Dim varDatos(3) As Variant varDatos(0) = "Cristina Martnez" varDatos(1) = "C/ Don Ramn de la Cruz, 73" varDatos(2) = 38 varDatos(3) = Format("06-09-1952", "Fecha general")

La otra forma consiste en asignar la matriz que devuelve la funcin Matriz a una variable Variant, tal y como muestra el siguiente ejemplo:
Dim varDatos As Variant

En el ejemplo siguiente queda esclarecido el empleo de ARRAY. Para declarar una variable de objeto se ha de usar la instruccin Dim o una de las restantes instrucciones de declaracin (Public , Private, o Static ). Una variable que se refiere a un objeto debe ser una Variant, un Object, o un tipo especfico de objeto. Por ejemplo, son vlidas las siguientes declaraciones: Declara MiObjeto como tipo de datos Variant.
Dim MiObjeto

Declara MiObjeto como un tipo de datos Object.


Dim MiObjeto As Object

Declara MiObjeto como un tipo Font.


Dim MiObjeto As Font

Para asignar una variable de objeto a un objeto se utiliza la instruccin Set. Es posible asignar una expresin de objeto o Nothing. Por ejemplo, son vlidas las siguientes asignaciones a una variable de objeto:
ALenM_ 17

ALenM_

Set MiObjeto = SuObjeto ' Asigna referencia a objeto Set MiObjeto = Nothing ' Deshace la relacin

Las variables se pueden declarar como de uno de los siguientes tipos de datos: Boolean
Las variables tipo Boolean se almacenan como nmeros de 16 bits (2 bytes), pero slo pueden ser True o False. Las variables tipo Boolean se presentan como True o False(cuando se utiliza Print) o #TRUE# o #FALSE# (cuando se utiliza Write #). Utilice las palabras clave True y False para asignar uno de los d os estados a las variables tipo Boolean. Cuando se convierten a tipo Boolean otros tipos numricos, 0 se convierte en False, y el resto de los valores se convierten en True. Cuando los valores tipo Boolean se convierten a otros tipos de datos numricos, False se convierta en 0 y True se convierte en -1.

Byte

Las variables tipo Byte se almacenan como nmeros de 8 bits (1 byte) sencillos sin signo con un intervalo de valores entre 0 y 225. El tipo de datos Byte es til para almacenar datos binarios.

Integer

Las variables Integer se almacenan como nmeros de 16 bits (2 bytes) con valores que van de 32.768 a 32.767. El carcter de declaracin de tipo para el tipo Integer es el signo de porcentaje (%). Las variables tipo Integer tambin se pueden utilizar para representar valores enumerados. Un valor enumerado puede contener un conjunto finito de nmeros enteros nicos, cada uno de los cuales tiene un significado especial en el contexto en el que se utiliza. Los valores enumerados proporcionan una forma cmoda de seleccionar entre un nmero conocido de opciones. Por ejemplo, cuando se pregunta al usuario que elija un color de una lista, se podra tener 0 = negro, 1 = blanco y as sucesivamente. Es una buena prctica de programacin definir constantes utilizando la instruccin Const para cada valor enumerado.

Long

Las variables Long (enteros largos) se almacenan como nmeros con signo de 32 bits (4 bytes) con un valor comprendido entre - 2.147.483.648 y 2.147.483.647. El carcter de declaracin de tipo para Long es el signo &.

Currency

Las variables tipo Currency se almacenan como nmeros de 64 bits (8 bytes) en un formato de nmero entero a escala de 10.000 para dar un nmero de punto fijo con 15 dgitos a la izquierda del signo decimal y 4 dgitos a la derecha. Esta representacin proporciona un intervalo de -922.337.203.685.477,5808 a 922.337.203.685.477,5807. El carcter de declaracin de tipo para Currency es el signo @. El tipo de datos Currency es til para clculos monetarios y para clculos de punto fijo, en los cuales la precisin es especialmente importante

Single

Las variables Single (punto flotante de precisin simple) se almacenan como nmeros IEEE de coma flotante de 32 bits (4 bytes) con valores que van de -3,402823E38 a -1,401298E-45 para valores negativos y de 1,401298E-45 a 3,402823E38 para valores positivos. El carcter de declaracin de tipo para Single es el signo de exclamacin (! ).

Double
Las variables dobles (punto flotante de doble precisin) se almacenan como nmeros IEEE de coma flotante de 64 bits (8 bytes) con valores de 1,79769313486231E308 a -4,94065645841247E-324 para valores negativos y de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. El carcter de declaracin de tipo para Double es el signo de nmero (#).

String

Hay dos clases de cadenas: cadenas de longitud variable y cadenas de longitud fija. Las cadenas de longitud variable pueden contener hasta 2.000 millones de caracteres (2^31). Las cadenas de longitud fija que pueden contener de 1 a 64 KB (2^16) caracteres. Nota No se puede usar una cadena Public de longitud fija en un mdulo de clase. Los cdigos para caracteres de tipo String varan desde 0 a 255. Los primeros 128 caracteres (0127) del juego de caracteres corresponden a las letras y los smbolos de un teclado estndar de EE.UU. Estos primeros 128 caracteres son los mismos que los definidos por el juego de caracteres ASCII. Los siguientes 128 caracteres (128255) 18

ALenM_

ALenM_ representan caracteres especiales, como letras de alfabetos internacionales, acentos, smbolos de moneda y fracciones. El carcter de declaracin de tipo para String es el signo de dlar ($).

Object

Las variables Object se almacenan como direcciones de 32 bits (4 bytes) que hacen referencia a objetos. Al utilizar la instruccin Set , una variable declarada con tipo Object puede tener asignado cualquier referencia a un objeto. Nota Aunque una variable declarada con un tipo Object es lo suficientemente flexible como para contener una referencia a cualquier objeto, enlazar con el objeto referenciado por dicha variable es un proceso lento (enlace en tiempo de ejecucin). Para forzar el enlace temprano (enlace en tiempo de compilacin), se puede asignar la referencia del objeto a una variable declarada con un nombre de clase especfico. Variant. Si no se especifica el tipo de datos, el tipo de datos Variant es el predefinido. Variant es el tipo de datos para todas las variables si no se declaran explcitamente como de algn otro tipo (utilizando instrucciones como Dim, Private, Public o Static). El tipo de datos Variant no tiene un carcter de declaracin de tipo. Variant es un tipo de datos especial que puede contener cualquier clase de datos excepto datos de cadena de longitud fija (los tipos Variant admiten ahora tipos definidos por el usuario.) Variant tambin puede contener los valores especiales Empty, Error, Nothing y Null. Puede determinar la forma en que desea tratar los datos tipo Variant utilizando las funciones VarType o TypeName . Los datos numricos pueden ser cualquier nmero entero o real entre -1,797693134862315E308 y -4,94066E-324 para los valores negativos, y entre 4,94066E-324 y 1,797693134862315E308 para los valores positivos. Generalmente, los datos tipo Variant numricos se conservan en su tipo de datos original dentro de un tipo Variant. Por ejemplo, si asigna un tipo Integer a un tipo Variant, las operaciones posteriores tratan el tipo Variant como si fuera un tipo Integer. No obstante, si realiza una operacin aritmtica en un tipo Variant que contenga un tipo de datos Byte, Integer, Long, o Single, y el resultado supera el intervalo normal del tipo de datos original, el resultado se promociona dentro del tipo Variant hasta el tipo de datos mayor siguiente. Un tipo Byte se promociona a un tipo Integer, un tipo Integer a un tipo Long , y un tipo Long y un tipo Single se promocionan a un tipo Double. Se produce un error cuando las variables tipo Variant que contienen valores tipo Currency, Decimal, y Double superan sus intervalos respectivos. Puede utilizar el tipo de datos Variant en lugar de cualquier otro tipo de datos para trabajar con los datos de una manera ms flexible. Si el contenido de una variable tipo Variant est formado por dgitos, pueden ser la representacin de cadena de los dgitos o su valor real, dependiendo del contexto.

Para declarar CONSTANTES. El siguiente ejemplo declara la constante Public EdadCon como un Integer y le asigna el valor 34.
Public Const EdadCon As Integer = 34

Las constantes se pueden declarar de uno de los siguientes tipos de datos: Boolean, Byte, Integer, Long, Currency, Single , Double , Date, String, o Variant Las variables de salida pueden o no ser formateadas (FORMAT ) para su mejor interpretacin por los usuarios. La tabla siguiente identifica los caracteres que puede utilizar para crear formatos definidos por el usuario: Carcter Ninguno Descripcin
Muestra el nmero sin formato.

ALenM_

19

ALenM_

(0)

Marcador de posicin de dgito. Muestra un dgito o un cero. Si la expresin tiene un dgito en la posicin donde aparece el 0 en la cadena de formato, se muestra el dgito; de lo contrario, se muestra un cero en esa posicin. Si el nmero tiene menos dgitos que ceros (a cualquier lado del separador decimal) en la expresin de formato, se muestran los ceros a la izquierda o a la derecha. Si el nmero tiene ms dgitos a la derecha del separador decimal que ceros hay a la derecha del separador decimal en la expresin de formato, se redondea el nmero en tantos lugares decimales como ceros existan. Si el nmero tiene ms dgitos a la izquierda del separador decimal que ceros hay a la izquierda del separador decimal en la expresin de formato, se muestran los dgitos adicionales sin modificacin. Marcador de posicin de dgito. Muestra un dgito o nada. Si la expresin tiene un dgito en la posicin donde aparece # en la cadena de formato, se muestra el dgito; de lo contrario, no se muestra nada en esa posicin. Este smbolo funciona como el marcador de posicin del dgito 0, excepto en que no se muestran los ceros a la izquierda o a la derecha si el nmero tiene los mismos o menos dgitos que caracteres # hay a cualquier lado del separador decimal en la expresin de formato. Marcador de posicin decimal. En algunas configuraciones regionales, se utiliza una coma como separador decimal. El marcador de posicin decimal determina cuntos dgitos se muestran a la izquierda y a la derecha del separador decimal. Si la expresin de formato contiene slo signos de nmero a la izquierda de este smbolo, los nmeros menores de 1 comienzan con un separador decimal. Si se desea que siempre se muestre un cero a la izquierda en los nmeros fraccionarios, utilice 0 como marcador de posicin del primer dgito a la izquierda del separador decimal. El carcter real utilizado como marcador de posicin decimal en la salida con formato depende del formato de nmero reconocido por el sistema. Marcador de posicin de porcentaje. La expresin se multiplica por 100. El carcter de porcentaje (%) se inserta en la posicin donde aparece en la cadena de formato. Separador de millar. En algunas configuraciones regionales, se utiliza un punto como separador de millar. El separador de millar separa los millares de las centenas en un nmero que tiene cuatro o ms lugares a la izquierda del separador decimal. Se especifica el uso estndar del separador de millar si el formato contiene un separador de millar rodeado por los marcadores de posicin de dgitos (0 o #). Dos separadores de millar adyacentes o un separador de millar inmediatamente a la izquierda del separador decimal (aunque no se especifique un decimal) significa "escalar el nmero dividindolo por 1000, redondendolo si es necesario". Por ejemplo, puede utilizar la cadena de formato "##0,," para representar 100 millones como 100. Los nmeros menores que un milln se muestran como 0. Dos separadores de millar adyacentes en cualquier posicin diferente a la inmediatamente a la izquierda del separador decimal se consideran simplemente como seal de que se est usando un separador de millar. El carcter real utilizado como separador de millar en la salida con formato depende del formato de nmero reconocido por el sistema. Separador de hora. En algunas configuraciones regionales se pueden utilizar otros caracteres para representar el separador de hora. El separador de hora separa horas, minutos y segundos cuando los valores de hora tienen formato.

(#)

(.)

(% )

(,)

(: )

ALenM_

20

ALenM_

El carcter real utilizado como separador de hora en formato viene determinado por las configuraciones del sistema.

(/)

Separador de fecha. En algunas configuraciones regionales se pueden utilizar otros caracteres para representar el separador de fecha. El separado de fecha separa el da, el mes y el ao cuando los valores de fecha tienen formato. El carcter real utilizado como separador de fecha en formato viene determinado por las configuraciones del sistema.

(E- E+ e- Formato de notacin cientfica. Si la expresin de formato contiene al menos un marcador de posicin de dgito(0 o #) a la derecha de E-, E+, e- o e+, el e+)
nmero se muestra en formato cientfico y se inserta E o e entre el nmero y su exponente. El nmero de marcadores de posicin de dgito a la derecha determina el nmero de dgitos en el exponente. Utilice E- o e- para colocar un signo menos junto a los exponentes negativos y E+ o e+ para incluir un signo ms junto a los exponentes positivos.

-+$()

Muestra un carcter literal. Para mostrar un carcter diferente a los enumerados, escriba delante una barra inversa ( \) o escrbalo entre comillas dobles (" "). Muestra el carcter siguiente en la cadena de formato. Para mostrar un carcter que tiene un significado especial como un carcter literal, escriba delante barra inversa ( \). La barra inversa propiamente dicha no se muestra. Utilizar la barra inversa es igual que poner entre comillas dobles el carcter siguiente. Para mostrar una barra inversa, utilice dos barras inversas (\\). Ejemplos de caracteres que no se pueden mostrar como caracteres literales son los caracteres de formato de fecha y de hora (a, c, d, h, m, n, p, q, s, t, w, y, / y :), los caracteres de formato numrico (#, 0, %, E, e, coma y punto) y los caracteres de formato de cadena (@, &, <, > y !). Muestra la cadena que hay entre comillas dobles (" "). Para incluir una cadena con formato desde el cdigo, debe utilizar Chr(34) para encerrar el texto (34 es el cdigo de carcter para las comillas dobles (")).

(\)

("ABC")

Ejemplo de la funcin Format. En este ejemplo se muestran varios usos de la funcin Format para dar formato a valores utilizando formatos definidos por el usuario y formatos con nombre. La verdadera salida formateada presentada por el sistema para el separador de fecha (/), de hora (:) y el literal AM/ PM depende de las configuraciones en ese momento. Cuando las horas y las fechas se vuelven a listar en el entorno de desarrollo, se utilizan los formatos abreviados de hora y de fecha de la configuracin regional del cdigo. Cuando son presentados por el cdigo en ejecucin, se utilizan los formatos abreviados de fecha y hora de la configuracin regional del sistema, los cuales pueden diferir de la configuracin regional del cdigo. En este ejemplo se asume que es Ingls/Estados Unidos. MiHora y MiFecha se presentan en el entorno de desarrollo utilizando configuraciones actuales de fecha corta y hora corta.
Dim MiHora, MiFecha, MiCadena

ALenM_

21

ALenM_ MiHora = #17:04:23# MiFecha = #27 enero 1993#

Devuelve la hora actual del sistema en el formato largo de hora definido por el sistema.
MiCadena = Format(Time, "Long Time")

Devuelve la fecha actual del sistema en el formato largo de fecha definido por el sistema.
MiCadena = Format(Date, "Long Date") MiCadena = Format(MiHora, "h:m:s") MiCadena = Format(MiHora, "hh:mm:ss AMPM") MiCadena = Format(MiFecha, "dddd, d mmm aaaa") ' Devuelve "17:4:23". ' Devuelve "05:04:23 PM". ' Devuelve "Mircoles, ' 27 de Ene de 1993".

Si no se suministra el formato, devuelve una cadena.


MiCadena = Format(23)

' Devuelve "23".

Formatos definidos por el usuario.


MiCadena = Format(5459.4, "##,##0.00") MiCadena = Format(334.9, "###0.00") MiCadena = Format(5, "0.00%") MiCadena = Format("HOLA", "<") MiCadena = Format("Esto es", ">")

' Devuelve "5.459,40". ' Devuelve "334,90". ' Devuelve "500,00%". ' Devuelve "hola". ' Devuelve "ESTO ES".

VI. PROCEDIMIENTOS Y FUNCIONES


Private Sub cmdCalcular_Click() Dim temp As Double temp = txtTemperatura.Value MsgBox "La temperatura es " & Celsius(temp) & " grados C." End Sub Function Celsius(GradosF) Celsius = (GradosF - 32) * 5 / 9 Celsius = Format(Celsius, "###0.00") End Function Private Sub lblTexto_Click() End Sub Private Sub txtTemperatura_Change() End Sub

Un procedimiento Sub es una serie de instrucciones Visual Basic, encerradas entre un par de instrucciones Sub y End Sub, que realizan acciones especficas pero no devuelven ningn valor. Un procedimiento Sub puede aceptar argumentos, como constantes, variables o expresiones que le pasa el procedimiento que ha efectuado la llamada. Si un procedimiento Sub no tiene argumentos, la instruccin Sub debe incluir un par de parntesis vaco.

ALenM_

22

ALenM_

Una funcin FUNCTION resuelve una o varias ecuaciones que son repetitivas a lo largo del clculo y por tanto su empleo simplifica la escritura del programa principal. Una FUNCTION lleva uno o varios argumentos de entrada entre parntesis:
Function Celsius(GradosF)

VII. COMANDOS CONDICIONALES MS FRECUENTES For i=1 to #1 Step (+/-)#2 .. Next i Do While [condicin (es)] Loop If Cells(16, 5) > Cells(9, 7) Then limite_sup = valor Else limite_inf = valor End If Function Bonificacin(rendimiento, salario) If rendimiento = 1 Then Bonificacin = salario * 0.1 ElseIf rendimiento = 2 Then Bonificacin= salario * 0.09 ElseIf rendimiento = 3 Then Bonificacin = salario * 0.07 Else Bonificacin = 0 End If End Function

Function Bonificacin(rendimiento, salario) Select Case rendimiento Case 1 Bonificacin = salario * 0.1 Case 2, 3 Bonificacin = salario * 0.09 Case 4 To 6 Bonificacin = salario * 0.07 Case Is > 8 Bonificacin = 100 Case Else

ALenM_

23

ALenM_

Bonificacin = 0 End Select End Function La instruccin With permite especificar una vez un objeto o tipo definido por el usuario en una serie entera de instrucciones. Las instrucciones With aceleran la ejecucin de los procedimientos y ayudan a evitar el tener que escribir repetidas veces las mismas palabras. El siguiente ejemplo introduce en un rango de celdas el nmero 30, aplica a esas celdas un formato en negrita y hace que su color de fondo sea el amarillo. With Worksheets("Hoja1").Range("A1:C10") .Value = 30 .Font.Bold = True .Interior.Color = RGB(255, 255, 0) End With Las instrucciones With se pueden anidar para aumentar su eficiencia. El siguiente ejemplo inserta una formula en la celda A1 y selecciona a continuacin el tipo de letra. With Workbooks("Libro1").Worksheets("Hoja1").Cells(1, 1) .Formula = "=SQRT(50)" With .Font .Name = "Arial" .Bold = True .Size = 8 End With End With VIII. FUNCIONES MAS TILES DEL VB Abs(nmero): Devuelve un valor del mismo tipo que el que se pas como parmetro y que especifica el valor absoluto de un nmero. El argumento nmero puede ser cualquier expresin numrica vlida. Si nmero contiene Null, la funcin devolver Null; si es una variable no inicializada, devolver cero. Atn es la funcin trigonomtrica inversa de Tan, que toma un ngulo y su argumento y devuelve la razn de dos lados de un tringulo rectngulo. No confunda con la cotangente, que es el inverso de la tangente (1/tangente). El argumento nmero es un tipo Double o cualquier expresin numrica vlida.

Atn(nmero):

ALenM_

24

ALenM_

La funcin Atn toma la razn de dos lados de un tringulo rectngulo (nmero) y devuelve el ngulo correspondiente en radianes. La razn es la longitud del lado opuesto al ngulo dividida por la longitud del lado adyacente al ngulo. El ngulo del resultado es -pi/2 a pi/2 radianes. Para convertir grados en radianes, multiplique los grados por PI/180. Para convertir radianes en grados, multiplique los radianes por 180/PI Choose(Funcin): Es un mtodo abreviado para Select Case Choose(intNumIndice, expresin1, expresin2, ..., expresin ensima) Donde intNumIndice es una variable que va desde 1 hasta el nmero de expresiones que se desee. Cos(nmero): Devuelve un tipo Double que especifica el coseno de un ngulo. El argumento nmero es un tipo Double o cualquier expresin numrica vlida que expresa un ngulo en radianes. La funcin Cos toma un ngulo y devuelve la razn de dos lados de un tringulo rectngulo. La razn es la longitud del lado adyacente al ngulo dividida por la longitud de la hipotenusa. El resultado est dentro del intervalo -1 a 1. Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi. Exp (numero): Devuelve un tipo Double que especifica e (la base de los logaritmos naturales) elevado a una potencia. La funcin Exp complementa la accin de la funcin Log y a veces se llama antilogaritmo. El argumento nmero es un tipo Double o cualquier expresin numrica vlida. Si el valor de nmero es mayor que 709.782712893, se produce un error. El valor de la constante e es 2.718282 aproximadamente La funcin Exp complementa la accin de la funcin Log y a veces se llama antilogaritmo. Int, Fix (numero): Devuelve la parte entera de un nmero. El argumento nmero es un tipo Double o cualquier expresin numrica vlida. Si nmero contiene Null, la funcin devolver Null. IIf (Funcin): Devuelve uno de entre dos valores, dependiendo de la evaluacin de una expresin. variable = IIf(expr, truepart, falsepart) La sintaxis de la funcin IIf cuenta con los siguientes argumentos con nombre:
Parte Descripcin

ALenM_

25

ALenM_

expr truepart

Requerido. Expresin que se desea evaluar. Requerido. Valor o expresin devuelta si expr es True. Requerido. Valor o expresin devuelta si expr es False.

falsepart

Log (numero):

IIf siempre evala truepart y falsepart, aunque slo vaya a devolver una de ellas. Por esta razn, deber vigilar que no se produzcan efectos no deseados. Por ejemplo, si al evaluar falsepart se produce un error de divisin por cero, se generar un error aunque expr sea True. Devuelve un tipo Double que especifica el logaritmo natural de un nmero. El argumento nmero es un tipo Double o cualquier expresin numrica vlida mayor que cero. El logaritmo natural es el logaritmo en base e. El valor de la constante e es 2.718282 aproximadamente. Puede calcular logaritmos en base-n para cualquier nmero x dividiendo el logaritmo natural de x por el logaritmo natural de n de la siguiente manera: Logn(x) = Log(x) / Log(n) El ejemplo siguiente ilustra una funcin personalizada (Function) que calcula logaritmos en base 10:
Static Function Log10(X) Log10 = Log(X) / Log(10#) End Function

Sgn(nmero):

Devuelve un tipo Variant (Integer) que indica el signo de un nmero. El argumento nmero puede ser cualquier expresin numrica vlida. Valores devueltos
Si nmero es Mayor que cero Igual a cero Menor que cero Sgn devuelve 1 0 -1

Sin (numero):

El signo del argumento nmero determina el valor devuelto por la funcin Sgn. Devuelve un tipo Double que especifica el seno de un ngulo.

ALenM_

26

ALenM_

El argumento nmero es un tipo Double o cualquier expresin numrica vlida que expresa un ngulo en radianes. La funcin Sin toma un ngulo y devuelve la razn de dos lados de un tringulo rectngulo. La razn es la longitud del lado opuesto al ngulo dividido por la longitud de la hipotenusa. El resultado entra dentro del intervalo -1 a 1. Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi. Sqr (numero): Devuelve un tipo Double que especifica la raz cuadrada de un nmero. El nmero argumento es un tipo Double o cualquier expresin numrica vlida mayor o igual a cero. Switch(condicin1, expresin1 , ... , condicin_ensima, expresin_ensima) Si la condicin 1 es la verdadera se devuelve el resultado de la expresin 1 y as sucesivamente. Tan(nmero): Devuelve un tipo Double que especifica la tangente de un ngulo. El argumento nmero es un tipo Double o cualquier expresin numrica vlida que expresa un ngulo en radianes. La funcin Tan toma un ngulo y devuelve la razn de dos lados de un tringulo rectngulo. La razn es la longitud del lado opuesto al ngulo, dividida por la longitud del lado adyacente al ngulo. UCase (cadena ): Devuelve un tipo Variant (String) que contiene una cadena especificada que se ha convertido a maysculas. El argumento cadena necesario es cualquier expresin de cadena vlida. Si cadena contiene Null, se devuelve Null. Slo se convierten a maysculas las letras minsculas. Las letras maysculas o los caracteres que no son letras no sufren cambios. MAS FUNCIONES EN: AYUDA CONTENIDO REFERENCIAS DEL ... FUNCIONES AYUDA CONTENIDO REFERENCIAS DEL ... GRUPOS

FUNCIONES DERIVADAS

ALenM_

27

ALenM_

Funcin Secante Cosecante Cotangente Seno inverso Coseno inverso Secante inversa Cosecante inversa Cotangente inversa Seno hiperblico Coseno hiperblico Tangente hiperblica Secante hiperblica Cosecante hiperblica Cotangente hiperblica Seno hiperblico inverso Coseno hiperblico inverso Tangente hiperblica inversa Logaritmo en base N Secante hiperblica inversa Cosecante hiperblica inversa Cotangente hiperblica inversa

Derivadas equivalentes Sec(X) = 1 / Cos(X) Cosec(X) = 1 / Sin(X) Cotan(X) = 1 / Tan(X) Arcsin(X) = Atn(X / Sqr(-X * X + 1)) Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1) Arcsec(X) = Atn(X / Sqr(X * X 1)) + Sgn((X) 1) * (2 * Atn(1))
Arccosec(X) = Atn(X / Sqr(X * X 1)) + (Sgn(X) 1) * (2 * Atn(1))

Arccotan(X) = Atn(X) + 2 * Atn(1) HSin(X) = (Exp(X) Exp(X)) / 2 HCos(X) = (Exp(X) + Exp(X)) / 2 HTan(X) = (Exp(X) Exp(X)) / (Exp(X) + Exp(X)) HSec(X) = 2 / (Exp(X) + Exp(X)) HCosec(X) = 2 / (Exp(X) Exp(X)) HCotan(X) = (Exp(X) + Exp(X)) / (Exp(X) Exp(X)) HArcsin(X) = Log(X + Sqr(X * X + 1)) HArccos(X) = Log(X + Sqr(X * X 1)) HArctan(X) = Log((1 + X) / (1 X)) / 2 LogN(X) = Log(X) / Log(N) HArcsec(X) = Log((Sqr(X * X + 1) + 1) / X) HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X) HArccotan(X) = Log((X + 1) / (X 1)) / 2

ALenM_

28

ALenM_

IX. OPERADORES. ARITMETICOS resultado = nmero^exponente La sintaxis del operador ^ consta de las siguientes partes:
Parte resultado nmero exponente Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin numrica. Requerido; cualquier expresin numrica.

resultado = nmero1*nmero2 La sintaxis del operador * consta de las siguientes partes:


Parte resultado Nmero1 Nmero2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin numrica. Requerido; cualquier expresin numrica.

resultado = nmero1 / nmero2 La sintaxis del operador / consta de las siguientes partes:
Parte resultado Nmero1 Nmero2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin numrica. Requerido; cualquier expresin numrica.

resultado = nmero1 \ nmero2

[divisin entera]

La sintaxis del operador \ consta de las siguientes partes:


Parte resultado Nmero1 Nmero2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin numrica. Requerido; cualquier expresin numrica.

ALenM_

29

ALenM_

resultado = nmero1 Mod nmero2 slo el resto.]

[Divide dos nmeros y devuelve

La sintaxis del operador Mod consta de las siguientes partes:


Parte resultado Nmero1 Nmero2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin numrica. Requerido; cualquier expresin numrica.

resultado = expresin1+expresin2 La sintaxis del operador + consta de las siguientes partes:


Parte resultado Expresin1 expresin2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin. Requerido; cualquier expresin.

resultado = nmero1-nmero2 La sintaxis del operador consta de las siguientes partes:


Parte resultado Nmero Nmero1 Nmero2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin numrica. Requerido; cualquier expresin numrica. Requerido; cualquier expresin numrica.

DE CONCATENACIN y LGICOS & (Operador): Se utiliza para forzar la concatenacin de las cadenas de dos expresiones. resultado = expresin1 & expresin2 La sintaxis del operador & consta de las siguientes partes:
Parte resultado Descripcin Requerido; cualquier variable tipo String o Variant.

ALenM_

30

ALenM_

expresin1 expresin2

Requerido; cualquier expresin. Requerido; cualquier expresin.

+ (Operador): Se utiliza para sumar dos nmeros. resultado = expresin1 + expresin2 La sintaxis del operador + consta de las siguientes partes:
Parte resultado Expresin1 expresin2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin. Requerido; cualquier expresin.

Cuando utilice el operador + quiz no pueda determinar si se va a realizar una suma o una concatenacin de cadenas. Utilice el operador & para la concatenacin, de modo que se eviten ambigedades y se suministren programas claros y explcitos. Si hay al menos una expresin que no sea de tipo Variant, se aplican las siguientes reglas:
Si Entonces

Ambas expresiones son tipos de datos Suma. numricos (Byte, Boolean, Integer, Long, Single, Double, Date, Currency o Decimal) Ambas expresiones son del tipo String Una expresin es de un tipo de datos numrico y la otra cualquier tipo Variant excepto Null Una expresin es del tipo String y la otra cualquier tipo Variant excepto Null Una expresin es del tipo Empty Variant Una expresin es de un tipo de datos numrico y la otra de tipo String Cualquiera de las expresiones es Null Concatenacin. Suma.

Concatenacin.

Devuelve sin modificaciones la expresin restante como resultado. Puede ocurrir un Error de tipos.

resultado es Null.

Si ambas expresiones son del tipo Variant, se aplican las siguiente reglas:

ALenM_

31

ALenM_

Si Ambas expresiones numricas tipo Variant son

Entonces Suma.

Ambas expresiones tipo Variant son cadenas de caracteres Una expresin tipo Variant es numrica y la otra es una cadena de caracteres

Concatenacin. Suma.

En adiciones aritmticas simples de expresiones de tipos de datos numricos nicamente, el tipo de dato de resultado es habitualmente el mismo que el de la expresin con mayor precisin. El orden de precisin, de menos exacto a ms exacto, es Byte, Integer, Long, Single , Double , Currency y Decimal. Esta regla tiene las siguientes excepciones:
Si Se suman un tipo Single y un tipo Long, El tipo de dato de resultado es Long, Single o Date tipo variant que desborda su intervalo vlido, El tipo de dato de resultado es un Byte tipo variant que se sale del intervalo vlido, El tipo de dato de resultado es un Integer tipo variant que se sale del intervalo vlido, Un Date se agrega a cualquier tipo de dato, El resultado es un tipo Double. se convierte a un Double tipo variant.

se convierte a un Integer tipo variant. se convierte a un Long tipo variant.

un tipo Date.

Si una de las expresiones o ambas son expresiones de tipo Null, resultado es Null. Si ambas expresiones son Empty, el resultado es Integer. Sin embargo, slo una de las expresiones es Empty, se devuelve la otra sin modificaciones como resultado. El orden de precisin utilizado por la suma y la resta no es igual que el orden de precisin utilizado por la multiplicacin. And (Operador): Se utiliza para efectuar una conjuncin lgica de dos expresiones. resultado = expresin1 And expresin2 La sintaxis del operador And consta de las siguientes partes:
Parte resultado expresin1 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin.

ALenM_

32

ALenM_

expresin2

Requerido; cualquier expresin.

Si y slo si ambas expresiones se evalan como True, el resultado es True. Si cualquiera de las expresiones es False, el resultado es False. La siguiente tabla ilustra cmo se determina el resultado:
Si expresin1 es True True True False False False Null Null Null Y expresin2 es True False Null True False Null True False Null El resultado es True False Null False False False Null False Null

Eqv (Operador): expresiones.

Se utiliza para efectuar una equivalencia lgica de dos

Resultado = expresin1 Eqv expresin2 La sintaxis del operador Eqv consta de las siguientes partes:
Parte resultado Expresin1 Expresin2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin. Requerido; cualquier expresin.

Si cualquiera de las expresiones es de tipo Null, el resultado es tambin Null. Si ninguna de las expresiones es Null, el resultado se determina segn la siguiente tabla:
Si expresin1 es True True False False Y expresin2 es True False True False El resultado es True False False True

ALenM_

33

ALenM_

Imp (Operador): expresiones.

Se utiliza para efectuar una implicacin lgica de dos

resultado = expresin1 Imp expresin2 La sintaxis del operador Imp consta de las siguientes partes:
Parte Resultado Expresin1 Expresin2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin. Requerido; cualquier expresin.

La siguiente tabla ilustra cmo se determina el resultado:


Si expresin1 es True True True False False False Null Null Null Y expresin2 es True False Null True False Null True False Null El resultado es True False Null True True True True Null Null

Not (Operador): expresin.

Se utiliza para ejecutar una negacin lgica sobre una

resultado = Not expresin La sintaxis del operador Not consta de las siguientes partes:
Parte resultado expresin Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin.

La siguiente tabla muestra cmo se determina el resultado:

ALenM_

34

ALenM_

Si expresin es True False Null

Entonces resultado es False True Null

Or (Operador): expresiones.

Se utiliza para ejecutar una disyuncin lgica sobre dos

resultado = expresin1 Or expresin2 La sintaxis del operador Or consta de las siguientes partes:
Parte Resultado expresin1 expresin2 Descripcin Requerido; cualquier variable numrica. Requerido; cualquier expresin. Requerido; cualquier expresin.

Si cualquiera de las expresiones, o ambas, es True, el resultado es True. La siguiente tabla indica cmo se determina el resultado:
Si expresin1 es True True True False False False Null Null Null Y expresin2 es True False Null True False Null True False Null El resultado es True True True True False Null True Null Null

Xor (Operador): expresiones.

Se utiliza para realizar una exclusin lgica entre dos

[resultado =] expresin1 Xor expresin2 La sintaxis del operador Xor consta de las siguientes partes:
Parte Descripcin

ALenM_

35

ALenM_

resultado expresin1 expresin2

Requerido; cualquier variable numrica. Requerido; cualquier expresin. Requerido; cualquier expresin.

Si una y slo una de las expresiones es True, el resultado es True. Sin embargo, si cualquiera de las expresiones es Null, el resultado es tambin Null. Cuando ninguna de las expresiones es Null, el resultado se determina de acuerdo con la siguiente tabla:
Si expresin1 es True True False False Y expresin2 es True False True False El resultado es False True True False

X. COLORES en VB. Seleccin:


Range("B6").Select Range("B6:G20").Select Selection.Interior.ColorIndex = NUMERO Selection.Font.ColorIndex = NUMERO

Sin relleno: Selection.Interior.ColorIndex = xlNone

Selection.Interior.PatternColorIndex = NUMERO

ALenM_

36

ALenM_

Selection.Interior.Pattern = PATRON

XI. MENSAJES La Funcin MsgBox() muestra un mensaje en un cuadro de dilogo, espera a que el usuario haga clic en un botn y devuelve un tipo Integer correspondiente al botn elegido por el usuario.
MsgBox(cadena del mensaje[, buttons ][, title]) buttons Opcional. Expresin numrica que corresponde a la suma de los valores que especifican el nmero y el tipo de los botones que se pretenden mostrar, el estilo de icono que se va a utilizar, la identidad del botn predeterminado y la modalidad del cuadro de mensajes. Si se omite este argumento, el valor

ALenM_

37

ALenM_

predeterminado para buttons es 0.

Constante VbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical VbQuestion VbExclamation VbInformation

Valor 0 1 2 3 4 5 16 32 48 64

Descripcin El botn Aceptar. Los botones Aceptar y Cancelar. Los botones Anular, Reintentar e Ignorar. Los botones S, No y Cancelar. Los botones S y No. Los botones Reintentar y Cancelar. El icono de mensaje crtico. El icono de pregunta de advertencia. El icono de mensaje de advertencia. El icono de mensaje de informacin.

Valores devueltos Constante VbOK VbCancel VbAbort VbRetry VbIgnore VbYes VbNo Valor 1 2 3 4 5 6 7 Descripcin Hizo Clic en Aceptar Hizo Clic en Cancelar Hizo Clic en Anular Hizo Clic en Reintentar Hizo Clic en Ignorar Hizo Clic en S Hizo Clic en No

Ejemplo: Son idnticas estas instrucciones:


IntRespuesta = MsgBox(Listo ?, 1) IntRespuesta = MsgBox(Listo ?, vbOKCancel)

Si se quiere predeterminar uno de los botones agregue:


0 vdDefaultButton1 1er. botn

ALenM_

38

ALenM_

256 512

vdDefaultButton2 vdDefaultButton3

2do. 3er.

IntRespuesta = MsgBox(Listo ?, vbOKCancel+vdDefaultButton1)

Adicionalmente estos valores producen iconos en el cuadro de mensaje:


16 32 48 64 vbCritical VbQuestion VbExclamation vbInformation

IntRespuesta = MsgBox(Listo ?, vbOKCancel+ vbQuestion+ vdDefaultButton1,Pregunta)

XII. DEPURACIN Visual Basic, al igual que otros lenguajes de programacin, provee de una fuerte ayuda para los programadores en el momento crtico de poner a punto un programa. En la era de las grandes, en tamao, computadoras de las primeras generaciones esta tarea se resolva haciendo corridas mltiples a los programas e intercalando ordenes de escritura de las variables rastreadas. Esta tarea poda durar das hasta dar con el lugar en el programa donde se generaba el error. La barra de men del VB da el acceso a la ventana de DEPURACIN que permite una serie de procesos para la rpida puesta a punto del programa. Las tareas ms comunes son la de seleccionar variables con AGREGAR INSPECCION, descubrir la ventana para visualizarlas y correr la Sub paso a paso con la tecla F8. 1ro. Visual Basic Depuracin Ver Ventana de Inspeccin

ALenM_

39

ALenM_

2do. Visual Basic Depuracin Agregar Inspeccin 3ro. Visual Basic Depuracin F8 Otras opciones de esta ventana dan la posibilidad de Compilar para detectar errores de escritura del programa, ejecutar el programa hasta un punto definido por el cursor, o por procedimientos, o bien ubicar puntos de interrupcin para que al pasar el programa en su ejecucin se detenga (pause). Todas estas opciones dan la posibilidad de rastrear los errores de ejecucin y corregirlos con gran efectividad. No se concibe a un programador que no emplee este recurso sistemticamente para la construccin y puesta a punto de sus programas.

XIII. EJEMPLOS.

APROXIMACIONES SUCESIVAS Private Sub cmdCalcular_Click() limite_inf = 0 se ubica el valor que se estime conveniente limite_sup = 1000 se ubica el valor que se estime conveniente error_perm = Cells(13, 3) se ubica el valor en la celda 13,C valor = (limite_inf + limite_sup) / 2 Cells(16, 2) = valor en la celda 16,B esta el valor de la variable calculada error_calc = Abs((Cells(16, 5) - Cells(10, 3)) / Cells(10, 3)) Do While error_calc > error_perm
las celdas [16,E] y [10,C] definen el criterio de parada

If Cells(16, 5) > Cells(10, 3) Then

ALenM_

40

ALenM_

limite_sup = valor Else limite_inf = valor End If valor = (limite_inf + limite_sup) / 2 Cells(16, 2) = valor error_calc = Abs((Cells(16, 5) - Cells(10, 3)) / Cells(10, 3)) Loop End Sub METODO DE LAS SECANTES. Private Sub CommandButton1_Click() Se parte de tener una expresin de este tipo y = F(y) y se convierte a: F*(y)= F(y) y por tanto cuando F*(y) sea cero se habr llegado a la solucin valor_1 = 0 valor_2 = 100 se ubica el valor que se estime conveniente se ubica el valor que se estime conveniente
debe cumplirse que: F(valor_1)*F(valor_2) < 0

error_perm = Cells(13, 3) Cells(16, 2) = valor_1 primer_cal = Cells(16, 5) - Cells(10, 3) Cells(16, 2) = valor_2 segundo_cal = Cells(16, 5) - Cells(10, 3) valor_3 = valor_2 - segundo_cal * (valor_2 - valor_1) / (segundo_cal primer_cal) error_calc = Abs((Cells(16, 5) - Cells(10, 3)) / Cells(10, 3)) Do While error_calc > error_perm valor_1 = valor_2 Cells(16, 2) = valor_1 primer_cal = Cells(16, 5) - Cells(10, 3) valor_2 = valor_3 Cells(16, 2) = valor_2 segundo_cal = Cells(16, 5) - Cells(10, 3) valor_3 = valor_2 - segundo_cal * (valor_2 - valor_1) / (segundo_cal primer_cal)
ALenM_ 41

ALenM_

error_calc = Abs((Cells(16, 5) - Cells(10, 3)) / Cells(10, 3)) Loop End Sub Grficos de velocidad de convergencia
3.E+05

2.E+05

F(y)-y

2.E+05

F(y) - y

Secante Aprox. Suc.

1.E+05

5.E+04

0.E+00

-5.E+04 0 2 4 6 8 10 12 14 16 18 20

Iteracin
1.E+02 9.E+01 8.E+01 7.E+01 6.E+01 5.E+01 4.E+01 3.E+01 2.E+01 1.E+01 0.E+00 -1.E+01 -2.E+01

F(y)-y

Secante Aprox. Suc.

6 7 Iteracin

10

11

12

ALenM_

42

ALenM_

Ejemplo de Hoja Excel empleando las Macros para programar los clculos en este Umbral Hidromtrico.

ALenM_

43