Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o...

35
Macros: Variables, condicionales y ciclos. Programación y Tratamiento de datos para la Gestión http://progra.usm.cl UTFSM INF-130 (UTFSM) Programación y TDG 1/35

Transcript of Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o...

Page 1: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Macros: Variables, condicionales y ciclos.

Programación y Tratamiento de datos para la Gestión

http://progra.usm.cl

UTFSM

INF-130 (UTFSM) Programación y TDG 1/35

Page 2: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Variables

Recordando las variables

Como recordamos de Trinket, las variables son utilizadas para guardar valores y su tipodependerá de la clase de dato que se quiere guardar dentro de ellas.

En VBA existen variables de tipo entero que almacenan números, tipo doble que tambiénalmacenan números pero con decimales, tipo texto para guardar una cadena de caracteresentre algunos otros tipos de variables, tipo lógico para definir valores de verdadero o falso,entre otras.

A continuación se realizará una revisión de cada uno de los tipos básicos en VBA.

Existen otros tipos, pero esos se verán en el curso en el caso de ser necesario. Por ahora esnecesario aprender a identificar bien qué tipo es y hacer un correcto uso de ella.

INF-130 (UTFSM) Programación y TDG 2/35

Page 3: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Variables

Tipo Entero

Guardan números enteros. Se debe utilizar la clave Integer para declarar que es de este tipo.

El compilador de Visual Basic utiliza la instrucción Dim para determinar el tipo de datos de la variable y otra información, como qué código puede tener acceso a esta. En el ejemplo se declara una variable que contenga un valor Integer.Luego se hace una asignación de x con el valor 6.

En Trinket esto es equivalente a:

INF-130 (UTFSM) Programación y TDG 3/35

Page 4: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Variables

Tipo Doble

Almacenan números con el doble de precisión incluyendo números decimales. La palabraclave para este tipo de variables es Double.

Es importante saber que se debe declarar algo como Double sólo cuando se vaya atrabajar con este tipo de formato, ya que una variable de este tipo ocupa el doble deespacio que una entera, y se estaría quitando el espacio a una entera por cada dobledefinida. (¡Siempre definir bien los tipos de datos!).

Su equivalente en Trinket sería (float):

INF-130 (UTFSM) Programación y TDG 4/35

Page 5: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Variables

Tipo Lógico

Puede almacenar solamente dos valores: falso o verdadero. La palabra clave para definirestas variables es Boolean.

La primera línea declara la variable “booleana” y en la segunda asigna un valor. Solamentese puede asignar dos valores a este tipo de variables: True (verdadero) y False (falso).

En Trinket esto es equivalente a (logic):

INF-130 (UTFSM) Programación y TDG 5/35

Page 6: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

VariablesFecha y HoraFechas y Horas pueden ser manipulados de distintas maneras en VBA. En esta secciónveremos cómo declarar estos tipos de datos, y luego cómo se le asignan valores.Definimos una variable para Fecha y Hora como tipo Date.

Se pueden definir distintos Métodos para obtener o asignar valores a fechaActual ohoraActual. Por ejemplo tenemos los Métodos:• Date: devuelve la fecha actual• Now: devuelve la fecha y hora actual

En el código se vería de esta manera:

INF-130 (UTFSM) Programación y TDG 6/35

Page 7: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Para ver el resultado, usemos un MsgBox. Finalmente, la subrutina se vería así:

(Ejecuta el código en tu IDE)

INF-130 (UTFSM) Programación y TDG 7/35

VariablesFecha y Hora

Page 8: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Existen Métodos que nos entregan el día, mes y año de la fechaActual.Aplicarlo de esta manera:

Metodo(variable)

En este caso, los métodos a usar son Year(), Month() y Day().Si se quiere obtener el año, se utilizaría Year(fechaActual). Pruebe con desplegar en MsgBox el año, mes y día.

INF-130 (UTFSM) Programación y TDG 8/35

VariablesFecha y Hora

Page 9: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Se puede realizar lo mismo para obtener la hora, minuto y segundo. En estos casos, losmétodos que se ocupan son: Hour(), Minute() y Second().Ahora realiza lo mismo que antes, pero con los métodos ahora mencionados.

INF-130 (UTFSM) Programación y TDG 9/35

VariablesFecha y Hora

Page 10: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

También se puede obtener una fecha desde un String. El formato a ingresar puede ser:• DD/MM/AA• DD/MM/AAAA• MM/DD/AA• MM/DD/AAAA• Reemplazar “/” por “-”• También lo acepta en formato: AAAA/MM/DD ó AA/MM/DDEn el código coloca la línea: fechaActual = DateValue(string_de_fecha), y despliegaa través de un MsgBox.

INF-130 (UTFSM) Programación y TDG 10/35

VariablesFecha y Hora

Page 11: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Variables

Tipo Texto

Una variable de tipo texto se declara con la palabra clave String. En el siguiente código se

declara la variable libro y posteriormente se asigna un valor.

En Trinket esto es equivalente a (text):

INF-130 (UTFSM) Programación y TDG 11/35

Page 12: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Existen varias funciones que podemos ocupar para trabajar con los Strings, y de esta maneragenerar.• Concatenar: nos referimos a unir una o más cadenas de texto, para esto se utiliza eloperador “&”.

• Left: función que extrae un determinado número de caracteres de un texto definido. En elsiguiente ejemplo, se aplicará Left a la variable cadena, extrayendo 7 caracteres desde laizquierda.

INF-130 (UTFSM) Programación y TDG 12/35

Variables

Cadenas de Texto

Page 13: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

INF-130 (UTFSM) Programación y TDG 13/35

• Right: función que extrae un determinado número de caracteres de un texto definido. Enel siguiente ejemplo, se aplicará Right a la variable cadena, extrayendo 5 caracteres desdela derecha.

• Len: Ayuda a conocer la longitud de una cadena de texto, es decir la cantidad decaracteres que la conforma.

Variables

Cadenas de Texto

Page 14: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

INF-130 (UTFSM) Programación y TDG 14/35

• InStr: Función que devuelve la posición de dónde se encuentra un determinado carácter, palabra ofrase dentro de un texto. Es sensible a las mayúsculas y minúsculas, por lo que si no es exactamenteigual a la frase dentro de la cadena, devolverá 0 al no encontrarla.El siguiente ejemplo devuelve 2. Enumere loscaracteres con H=1 para verificar.

• Mid: Extrae una subcadena dentro de otra con sólo especificar la posición del carácter de inicio yluego cuántos caracteres a la derecha se moverá.El ejemplo devuelve Mid.

Variables

Cadenas de Texto

Page 15: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Controles en VBA

Controles de Formulario y ActiveXEn VBA tenemos para trabajar con 2 tipos de controles.

Primero, entenderemos por controles a aquellos elementos visuales que se añaden dentrode la hoja (como un botón por ejemplo) y que ejecutan funcionalidades dentro de nuestramacro.

Los controles de Formulario realizan acciones asociadas a una macro ya creada (cuandose inserta un control formulario, se le debe asignar una macro de la lista de las creadas).

Los controles ActiveX realizan acciones asociadas al evento de hacer click o seleccionar,generando en este evento un espacio para escribir instrucciones para ejecutar cuando esteocurra.

A continuación se verá como ocupar ambos tipos de controles.

INF-130 (UTFSM) Programación y TDG 15/35

Page 16: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Son objetos que podemos colocar dentro la hoja, o dentro de unformulario de usuario en VBA, y dan funcionalidad adicional parainteractuar mejor con los usuarios, y tener un mejor control sobrela información.

Podemos utilizar estos controles para ayudar a los usuarios aseleccionar elementos de una lista predefinida o permitir que elusuario inicie una macro con tan solo pulsar un botón. Loscontroles de formulario en Excel se encuentran dentro de la fichaProgramador dentro del grupo Controles.

INF-130 (UTFSM) Programación y TDG 16/35

Controles en VBA

Controles de Formulario

Page 17: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

¿Cómo insertar los controles del formulario?Para insertar cualquiera de los controles de formulario debes seleccionarlo del menú desplegable y hacer clic sobre la hoja de Excel arrastrando el borde para “dibujar” el contorno del control.Cuando dibujes el control, se abrirá un cuadro de diálogo que te pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva.OJO: No es necesario asignar una macro inmediatamente, puedes cancelar la operación y posteriormente lo realizas seleccionando la Opción “Asignar Macro” del botón secundario.

INF-130 (UTFSM) Programación y TDG 17/35

Controles en VBA

Controles de Formulario

Page 18: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Existen diferentes tipos de controles de formulario en Excel que ofrecen diversos tipos defuncionalidad e interacción con el usuario:

Barra de desplazamiento: Al hacer clic en las flechas se va desplazando la barra dentrode un intervalo predefinido.Botón: El botón permite ejecutar una macro al momento de hacer clic sobre él.Botón de opción: Permite una única selección dentro de un conjunto de opciones.Casilla de verificación: Permite la selección o no selección de una opción.Control de número. Ayuda a aumentar o disminuir un valor numérico.Cuadro combinado: Es una combinación de un cuadro de texto con un cuadro de lista.Cuadro de grupo: Agrupa varios controles dentro de un rectángulo.Cuadro de lista: Muestra una lista de valores de los cuales podemos elegir una solaopción o múltiples opciones de acuerdo a la configuración del control.Etiqueta: Permite especificar un texto o breves instrucciones en el formulario.

INF-130 (UTFSM) Programación y TDG 18/35

Controles en VBA

Controles de Formulario

Page 19: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Permiten agregar funcionalidad de formularios a los libros deExcel. Tienen algunas diferencias con los controles de Formulario.La diferencia más importante entre ambos es la manera en seobtiene información de los controles al momento de interactuarcon el usuario. Los controles de formulario solamenteresponderán después de que el usuario ha interactuado con ellos,así como después de haber pulsado el botón. En cambio, loscontroles ActiveX responden de manera continua a las accionesdel usuario lo cual permite realizar acciones como cambiar el tipode puntero del mouse que se muestra al colocar el puntero delratón sobre el botón, por ejemplo.

INF-130 (UTFSM) Programación y TDG 19/35

Controles en VBA

Controles ActiveX

Page 20: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

PropiedadesA diferencia de los controles de formulario, los controles ActiveX tienen una serie depropiedades que podemos configurar pulsando el botón Propiedades que se encuentradentro del grupo Controles de la ficha Programador.

Antes de poder ver las propiedades de un control ActiveX debemos pulsar el botón ModoDiseño el cual permitirá seleccionar el control y posteriormente ver sus propiedades.Cada tipo de control ActiveX mostrará una ventana de Propiedades con sus propiascaracterísticas.

INF-130 (UTFSM) Programación y TDG 20/35

Controles en VBA

Controles ActiveX

Page 21: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

A continuación un ejemplo de la ventana Propiedades para unbotón de comando ActiveX.

SUBRUTINAS en los controles ActiveXLos controles ActiveX no tienen asignada una macroexplícitamente sino que se puede asignar código VBA para cadaevento del control. Un evento de un control ActiveX puede ser“hacer clic sobre el control”, “hacer doble clic”, “obtener el focosobre el control ActiveX”, entre otros más.Para asignar código a uno de los eventos de un control ActiveXsolamente debemos hacer clic derecho sobre él y seleccionar laopción Ver código, o, hacer doble clic sobre él.

INF-130 (UTFSM) Programación y TDG 21/35

Controles en VBA

Controles ActiveX

Page 22: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

INF-130 (UTFSM) Programación y TDG 22/35

Lo anterior abrirá el entorno de VBA, donde se podrá escribir el código.

En la lista desplegable de la derecha se puede observar la lista de eventos disponiblespara el control ActiveX y para los cuales se puede escribir código VBA. Al seleccionarcualquiera de dichos eventos se insertará una nueva subrutina que se podrá utilizar. Estagran cantidad de eventos disponibles para los controles ActiveX son lo que los hacecontroles muy poderosos, y se podrán aprovechar en la construcción de los formularios.

Controles en VBA

Controles ActiveX - Subrutinas

Page 23: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Condicionales en VBAIf - ThenLa sentencia If-Then en VBA es la más básica de todas las declaraciones, en este casose hace en base a una condición. Esta significa: Si-Entonces, y se usará en situacionesdonde se necesita realizar la siguiente evaluación: Si se cumple la condición Entonces hazesto.Para probarlo, utilizaremos el botón recientemente creado y añadiremos datos a laplantilla:Obs: En las propiedades del botón, podemos cambiar el nombre del objeto (Name) y deltexto (Caption) que aparece, en este caso se nombró a ambos: “Calificar”.

INF-130 (UTFSM) Programación y TDG 23/35

Page 24: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

INF-130 (UTFSM) Programación y TDG 24/35

Condicionales en VBAIf – Then - ElseEsta variante permite hacer la siguiente evaluación: Si se cumple la condición Entonceshaz esto De lo contrario haz otra cosa.La declaración Else en VBA permite indicar otro bloque de instrucciones que se debenejecutar en caso de que la condición sea falsa. De esta manera se puede tomar unaacción determinada en caso de que la condición se cumpla o no. El botón ahora sellama”Calificar1”. End If sólo se usa en el caso de un If –Then – Else.

Page 25: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

If anidados se refiere a añadir más de una condición dentro de un If, se puede hacer dedos maneras:

INF-130 (UTFSM) Programación y TDG 25/35

Condicionales en VBAIf anidados

Nótese laintroducción deloperador And

Page 26: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Ciclos

De tipo WHILE

En esta sección abordaremos los siguientes tipos de ciclo While:• Do WhileSe tienen dos sintáxis:

• Las instrucciones se ejecutan, mientras que la condición devuelve valorverdadero.

Do While <condición>[instrucciones]

Loop• Las condiciones se ejecutan una vez, sin verificar la condición.

Posteriormente se seguirán ejecutando si la condición devuelve verdadero.Do[instrucciones]

Loop While <condición>

INF-130 (UTFSM) Programación y TDG 26/35

Page 27: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

INF-130 (UTFSM) Programación y TDG 27/35

Ciclos

De tipo WHILE

• Do WhileEjemplos:

Page 28: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

INF-130 (UTFSM) Programación y TDG 28/35

Ciclos

De tipo WHILE

• While … WendEjecuta una serie de instrucciones mientras se cumpla la condición. El siguiente ejemplosuma todos los valores desde la celda B1 hasta el final de los datos, omitiendo aquellasque sean vacías. Finalmente imprime el total en un MsgBox y lo copia en la última celda.OJO: en este botón no estamos usando ActiveX, se le asignó una Macros.

¿Qué es Offset?

Page 29: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

VBA

InputBox

El InputBox en VBA es sólo un método que permite que aparezca un pop-up enel cual se introduce cierta información.

Junto con el Msgbox, es muy frecuente en Excel usar pop-ups para interactuarcon el usuario. Con el InputBox podremos pedirle información.Como es un pop-up, en el código debemos invocar que aparezca.

INF-130 (UTFSM) Programación y TDG 29/35

Page 30: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

VBA

InputBox

La sintáxis no es complicada, pero tiene elementos que conviene destacar.Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)• Prompt: el texto que se mostrará en el pop-up. Es el único valor obligatorio• Title: el título del pop-up que aparecerá en la parte superior.• Default: el valor que mostrará por defecto el inputbox.• Type: el tipo de valor que podemos usar que puede ser de tipo numérico (1),

texto (2), verdadero/falso (4), referencia a una celda (8), una matriz (64)En el caso de que el valor se deje vacío o no sea del tipo se ha especificado,VBA mandará un error automáticamente.

30/35

Page 31: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

VBA

InputBox

Ejemplos:

INF-130 (UTFSM) Programación y TDG 31/35

Page 32: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Conversiones

CDate()

CDate es una función que transforma un String en un valor válido de fechas.No se recomienda hacer la codificación de fechas con horas en conjunto, sinopor separado.

Pruébelo =>

INF-130 (UTFSM) Programación y TDG 32/35

Page 33: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Conversiones

VAL()

Convierte a número el string que se le ingresa a la función Val(string).

INF-130 (UTFSM) Programación y TDG 33/35

Page 34: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Condicionales predefinidos

IsEmpty()

Prueba si el valor que se le pasa por parámetro está vacío. Puede ser unacelda vacía o una variable nula.Ej:

INF-130 (UTFSM) Programación y TDG 34/35

Page 35: Macros: Variables, condicionales y ciclos. · pedirá asignar una Macros ya creada, grabar una, o bien, escribir una nueva. OJO: No es necesario asignar una macro inmediatamente,

Condicionales predefinidos

IsNumeric()

Retorna si Verdadero si el parámetro es un número, falso en otro caso.Ej:

INF-130 (UTFSM) Programación y TDG 35/35