10.-Macros-funciones, entrada y salida de datos...VBA Funciones Declaramos una función mediante la...

12
Macros: Funciones, entrada y salida de datos. Programación y Tratamiento de datos para la Gestión http://progra.usm.cl UTFSM INF-130 (UTFSM) Programación y TDG 1/12

Transcript of 10.-Macros-funciones, entrada y salida de datos...VBA Funciones Declaramos una función mediante la...

Macros: Funciones, entrada y salida de datos.

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

http://progra.usm.cl

UTFSM

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

VBA

Funciones

Al igual que en Trinket, en VBA podemos crear Funciones. La diferencia entre Subrutinas y

Funciones es que éstas últimas pueden retornar un valor, y las otras no pueden.

Si queremos diseñar una tarea que nos retorne un valor, la solución es crear una función.

En Excel ya tenemos funciones predefinidas como: SUMA, PROMEDIO y otras vistas antes. A

todas estas se les envían unos parámetros, y luego nos devuelven un resultado. Esto es lo

que buscaremos hacer en esta sección.

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

VBA

Funciones

Declaramos una función mediante la sentencia Function de la siguiente forma:

Function <nombre_función> (parámetro1 As TipoDeDato1, …,

parámetroN As TipoDeDatoN) As TipodeDatoDelRetorno

‘ instrucciones

End Function

Tipo de dato son todos aquellos que conocimos en las variables, tales como Integer, Double,

String, Boolean y Date. Estos son los posibles tipos de datos que retorna Function.

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

VBA

Funciones

Veamos esto con un ejemplo:

Explicación: En la función Area vemos un parámetro llamado x y otro llamado y. Ambosson de tipo Double. La función Area devolverá un valor de tipo Double y calcula el valor enbase a x e y.

Si llamamos a la función desde una celda de la hoja como lo hacemos con las funcionesnormales de Excel, podemos ver que actúa de una misma manera y retorna en estecaso, el valor del Area de un elemento de lados 4 y 2.INF-130 (UTFSM) Programación y TDG 4/12

OJO: Usamos “;” porque en esta versión de Excel está configurado así desde las celdas.

VBA

Funciones

También se puede hacer uso de la Función desde otra Función o Subrutina. Por ejemplo,situemos en la hoja de Excel un Command Button (ActiveX), y activemos el evento de tipoclic.

La subrutina del CommandButton1 evento Click crea una variable llamada z de tipoDouble, la cual toma el valor de lo que retorna la función Area(3, 5) + 2, y posteriormentemuestra un MsgBox con el resultado.De esta manera podemos usar funciones creadas en VBA dentro de otros elementosprogramados en la macros.

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

Usamos “,” para separar los parámetros de la función dentro de un código de VBA.

ÁmbitosPublic, private y staticEn programación nos referimos al ámbito de una variable o de una función, como el lugaren donde aplican el uso y valores de estas.Para el caso de las variables, las definimos como: públicas, de módulo y de procedimiento.El primero que se define es dentro de un procedimiento (función o subrutina). En estoscasos, la variable puede ser declarada como Dim o Static. Si se declara como Dim, elvalor de la variable queda sólo durante la ejecución del procedimiento y cuando estetermina, el valor se borra de la memoria, es decir, si se ejecuta de nuevo, todos los valoresse reinician.

Si se declarara dentro de otro Procedimiento, una variable con el mismo nombre X, elvalor de ese X sólo es reconocido dentro de ese nuevo Procedimiento, no dentro delejemplo que acabamos de mostrar.

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

La otra forma de definir una variable local es utilizando la forma Static. Esta seguiráexistiendo todo el tiempo que se ejecuta en VBA. Esta se reinicia en los siguientes casos:• Macro genera un error en tiempo de ejecución.• VBA se detiene.• Cierra Excel• Se cambia el módulo.Ej:

Acum se ejecuta la primera vez solicitando un valor. Luego se cierra mostrando el valor de lasuma. SI se vuelve a ejecutar sin salir de ese módulo, se comprueba que muestra un valorde suma acumulada. INTENTALO

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

ÁmbitosPublic, private y static

El ámbito Módulo se refiere a variables que se crean para ser usadas en cualquierprocedimiento que se defina dentro del mismo Módulo. En este contexto se pueden definir comoDim o Private, pero no tiene diferencia cuál se usa en este caso.Veamos un ejemplo de un módulo con distintas subrutinas y variables de contexto de módulo.

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

ÁmbitosPublic, private y static

Ejecuta cadaprocedimiento enorden para quepuedas ver elresultado y lasdiferencias.

Public es el último tipo de declaración para una variable. Similar al Static en términos deser conocida para un módulo, utilizando Public, una variable es conocida para todos losmódulos del libro activo.Esta también se declara sobre todos los procedimientos y no dentro de una subrutina.Ej:

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

ÁmbitosPublic, private y static

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

Tipo Descripción

Public Opcional. Indica que la Subrutina es accessible por todos los procedimientos en todos los módulos. Si se usa en un modulo que contiene una opción Private, el procedimiento no estará disponible fuera del Proyecto.

Private Opcional. Indica que la Subrutina es accessible solo para los otrosprocedimientos en el modulo dónde es declarado.

Static Opcional. Indica que las variables locales de la Subrutina son preservadas entre llamadas. El atributo Static no afecta a las variables que son declaradas afuera del Sub, incluso si son usadasen el procedimiento.

ÁmbitosPublic, private y staticEn subrutinas es la misma idea el ámbito de acceso y uso.

VBA

Offset

El método Offset se aplica a una celda activa o un Range de celda. Sirve para moverse a

través de la hoja, como si se usara las teclas de flechas para avanzar. El formato es:

Offset(número_de_filas,número_de_columnas)

Ejemplos:

ActiveCell.Offset(1, 0).Select ‘ -> Avanza una fila (abajo)

ActiveCell.Offset(0, 1).Select ‘-> Avanza una columna (derecha)

ActiveCell.Offset(2, -1).Select ‘-> Avanza 2 filas (abajo) y retrocede 1 columna

(izquierda)

ActiveCell.Offset(0, 0).Select ‘ -> Se mantiene en la misma celda activa

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

Ejemplo de Offset.

También puedes revisar el ejemplo del While…Wend del tema 9.

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

VBA

Offset