La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

VBA - Procedimientos Subprogramas (Procedimientos): Procedimientos Sub

Presentaciones similares


Presentación del tema: "VBA - Procedimientos Subprogramas (Procedimientos): Procedimientos Sub"— Transcripción de la presentación:

1 VBA - Procedimientos Subprogramas (Procedimientos): Procedimientos Sub
Procedimientos Function

2 Subprogramas Para simplificar las tareas de programación se dividen los programas en componentes lógicos más pequeños. Estos componentes lógicos se denominan procedimientos o subrutinas. Los procedimientos resultan muy útiles para condensar las tareas repetitivas o compartidas, como cálculos utilizados frecuentemente, manipulación de texto y controles, operaciones con bases de datos, etc. Clase 10

3 Subprogramas Ya se han utilizado algunos tipos de subprogramas:
Funciones de la librería estándar de VB: Val(), Str(), Sqr(), Atn(), Abs(), etc. Otras funciones: MsgBox(), InputBox(), etc. Métodos propios de algunos controles: Clear, AddItem, Scale, Cls, Line, Circle, etc. Procedimientos asociados a eventos: Private Sub Command1_Click() End Sub Clase 10

4 Crear procedimientos Un procedimiento siempre se define a nivel de módulo (estándar o de formulario). Por lo tanto, un procedimiento no se puede anidar dentro de otro procedimiento. Todo el código ejecutable de un programa en VB debe estar contenido en uno o varios procedimientos. En VB se utilizan varios tipos de procedimientos: Procedimientos Sub que no devuelven un valor. Procedimientos Function que devuelven un valor. Clase 10

5 Procedimientos Sub Los procedimientos Sub no devuelven un valor.
Sintaxis: Alcance Sub NombreProc(parámetros) CuerpoProcedimiento End Sub Alcance: Opcional. Es el alcance del procedimiento. Puede ser Private o Public. Si no se especifica se asume Public. NombreProc: Requerido. Es el nombre del procedimiento. Clase 10

6 Procedimientos Sub parámetros: Opcional. Son los parámetros del procedimiento. (Véase más adelante). CuerpoProcedimiento: Opcional. Son las instrucciones que conforman al procedimiento. Cada vez que se llama al procedimiento se ejecutan las instrucciones que hay entre Sub y End Sub. El cuerpo del procedimiento puede tener instrucciones Exit Sub, la cual permite salir de inmediato del procedimiento. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó el procedimiento Sub. Clase 10

7 nombreObjeto_nombreEvento
Procedimientos Sub Existen dos tipos de procedimientos Sub: Procedimientos Generales y Procedimientos de Eventos. Un procedimiento de evento es un procedimiento que hace referencia a un evento de un objeto. Siempre el nombre de un procedimiento de evento se compone por el nombre del objeto, seguido de un subrayado, seguido del nombre del evento: nombreObjeto_nombreEvento Ejemplo: Command1_Click(), Form_Load(), Form_Resize() Un procedimiento general indica a la aplicación cómo realizar una tarea específica. Clase 10

8 Procedimientos Function
Son procedimientos que devuelven un valor. Sintaxis: Alcance Function NombreProc(parámetros) As Tipo CuerpoProcedimiento End Function Alcance: Opcional. Es el alcance del procedimiento. Puede ser Private o Public. Si no se especifica se asume Public. NombreProc: Requerido. Es el nombre del procedimiento. Clase 10

9 Procedimientos Function
parámetros: Opcional. Son los parámetros del procedimiento. (Véase más adelante). CuerpoProcedimiento: Opcional. Son las instrucciones que conforman al procedimiento. Puede tener instrucciones Exit Function. Tipo: Es el tipo de dato que retorna el procedimiento. El valor que retorna un procedimiento Function se le debe asignar al nombre del procedimiento, en caso contrario se retorna el valor por defecto. Clase 10

10 Argumentos vs Parámetros
Los argumentos pueden ser constantes, variables o expresiones pasadas a un procedimiento. Ejemplo: en la expresión: X = Sqr(15), el valor 15 corresponde al argumento pasado a la función Sqr de la librería estándar de VB. El parámetro es el nombre de variable por el cual un argumento de procedimiento se conoce dentro del procedimiento. Esta variable recibe el argumento que se pasa dentro del procedimiento. Su alcance es local, es decir, el alcance termina cuando el procedimiento finaliza. Clase 10

11 Declaración de Argumentos
Los parámetros de un procedimiento corresponde a una lista de variables (separadas por comas) que representan los argumentos que se pasan a un procedimiento cuando se le llama. La declaración de argumentos (parámetros) de un procedimiento tiene la siguiente sintaxis: [Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado] En la sintaxis, los corchetes ([]) significan que la expresión es opcional y la barra vertical (|) significa exclusión lógica. Clase 10

12 Declaración de Argumentos
La palabra clave Optional indica que no se requiere el argumento. Si se usa, todos los parámetros subsiguientes también deben ser opcionales y declararse mediante la palabra clave Optional. Optional no se puede utilizar en la declaración de un argumento si se usa la palabra clave ParamArray. ByVal indica que el argumento se pasa por valor, es decir, se pasa su valor (una copia de la variable) en vez de su dirección. Como resultado, el valor actual de la variable no puede ser cambiado por el procedimiento al cual se pasa. Clase 10

13 Declaración de Argumentos
ByRef indica que el argumento se pasa por referencia, es decir, se pasa su dirección en vez de su valor. Como resultado, el valor real de la variable puede ser cambiado por el procedimiento al cual se pasa. ByRef es el modo predeterminado en Visual Basic. La palabra clave ParamArray permite proporcionar un número arbitrario de argumentos. Sólo se puede utilizar en el último parámetro para indicar que el argumento final es una array Optional de elementos tipo Variant. No se puede utilizar con ByVal, ByRef u Optional. Clase 10

14 Declaración de Argumentos
nombre_variable es el nombre del parámetro. Los paréntesis al final del nombre de la variable significan que el parámetro recibe un array. No se debe especificar tamaño ni número de dimensiones del array, sólo se colocan los paréntesis vacíos. tipo es el tipo de dato del parámetro. Si no se especifica se asume Variant. valor_predeterminado es una expresión constante correspondiente al valor por defecto para parámetros opcionales. Sólo es válido para parámetros Optional. Clase 10

15 Llamar procedimientos
Los procedimientos se pueden llamar de varias formas: Utilizando el nombre y lista de argumentos Utilizando la instrucción Call En una expresión (sólo procedimientos Function) Utilizando el nombre y lista de argumentos: nombre_procedimiento arg1,arg2,…,argN En este caso, no se debe utilizar paréntesis después del nombre del procedimiento. Si el procedimiento retorna un valor, este se pierde. Útil para procedimientos Sub. Ejemplo: Sqr 15 Clase 10

16 Llamar procedimientos
Utilizando la instrucción Call: Call nombre_procedimiento(arg1,arg2,…,argN) En este caso, se debe utilizar paréntesis después del nombre del procedimiento. Si el procedimiento retorna un valor, este se pierde. Útil para procedimientos Sub. Ejemplo: Call Sqr(15) Clase 10

17 Llamar procedimientos
En una expresión: nombre_procedimiento(arg1,arg2,…,argN) En este caso, se debe utilizar paréntesis después del nombre del procedimiento. Sólo es válido para procedimientos Function. Ejemplos: X = Sqr(15) Y = Abs(10 * X – Atn(2)) Clase 10

18 Ejemplo 1 Realizar un procedimiento genérico que permita leer una matriz por el teclado de elementos reales. Realizar un procedimiento genérico que permita mostrar una matriz de elementos reales en una caja de texto. Clase 10

19 Ejemplo 1: Análisis Un procedimiento genérico para leer una matriz necesita: Un parámetro que recibe la matriz de tipo real simple: A() As Single Un parámetro por referencia, de tipo entero, para el número de filas: N As Integer Un parámetro por referencia, de tipo entero, para el número de columnas: M As Integer Clase 10

20 Ejemplo 1: Análisis Un procedimiento genérico para mostrar una matriz en una caja de texto necesita: Un parámetro que recibe la matriz de tipo real simple: A() As Single Un parámetro por valor, de tipo entero, para el número de filas: ByVal N As Integer Un parámetro por valor, de tipo entero, para el número de columnas: ByVal M As Integer Un parámetro con la referencia de la caja de texto: txt As TextBox Clase 10

21 Ejemplo 1: Implementación
Procedimiento genérico para leer una matriz: Public Sub LeerMatriz(A() As Single, N As Integer, _ M As Integer) Dim I As Integer N = Val(InputBox("Número de Filas:")) M = Val(InputBox("Número de Columnas:")) ReDim A(1 To N, 1 To M) For I = 1 To N For J = 1 To M A(I, J) = Val(InputBox("Ingrese elemento(" & _ I & ", " & J & "):")) Next J Next I End Sub Clase 10

22 Ejemplo 1: Implementación
Procedimiento genérico para mostrar una matriz: Public Sub MostrarMatriz(A() As Single, ByVal N As Integer, _ ByVal M As Integer, txt As TextBox) Dim I As Integer txt.Text = "" For I = 1 To N For J = 1 To M txt.Text = txt.Text & A(I, J) & vbTab Next J txt.Text = txt.Text & vbCrLf Next I End Sub Clase 10

23 Ejemplo 2 Realizar un procedimiento que permita multiplicar dos matrices: Una matriz A de orden mxn y una matriz B de orden pxq. Nota: Las matrices se pueden multiplicar si y sólo si n = p. El orden de la matriz resultante es mxq. Clase 10

24 Ejemplo 2: Análisis Un procedimiento para multiplicar dos matrices necesita: Dos parámetros que reciben las matrices de tipo real simple: A() As Single, B() As Single Cuatro parámetros por valor, de tipo entero, para el orden de cada matriz: N1 As Integer, M1 As Integer, N2 As Integer, M2 As Integer Un parámetro que devuelve la matriz resultante: C() As Single El procedimiento devolverá True si se realizó la multiplicación, en caso contrario devolverá False. Clase 10

25 Ejemplo 2: Implementación
Procedimiento para multiplicar dos matrices: Public Function MultMat(A() As Single, B() As Single, _ ByVal N1 As Integer, ByVal M1 As Integer, _ ByVal N2 As Integer, ByVal M2 As Integer, _ C() As Single) As Boolean Dim I As Integer, J As Integer, K As Integer, Sum As Single If M1 <> N2 Then MultMat = False: Exit Function ReDim C(1 To N1, 1 To M2) For I = 1 To N1 For J = 1 To M2 Sum = 0 For K = 1 To M1 Sum = Sum + A(I, K) * B(K, J) Next K C(I, J) = Sum Next J Next I MultMat = True End Sub

26 Ejemplo 3 Realizar un programa en VB que permita multiplicar dos matrices y mostrar el resultado. Clase 10

27 Ejemplo 3: Análisis Un programa que permita multiplicar dos matrices necesita: Leer las dos matrices Realizar la multiplicación Mostrar el resultado si la multiplicación fue posible, en caso contrario, mostrar un mensaje descriptivo. El programa puede hacer uso de los procedimientos definidos anteriormente, implementándolos en un módulo estándar. Clase 10

28 Ejemplo 3: Implementación
'En el evento Click de un botón de Comando. Dim M1() As Single, M2() As Single, M3() As Single Dim N As Integer, M As Integer, P As Integer, Q As Integer Call LeerMatriz(M1, N, M) Call LeerMatriz(M2, P, Q) If (MultMat(M1, M2, N, M, P, Q, M3)) Then MostrarMatriz M3, UBound(M3, 1), UBound(M3, 2), Text1 Else MsgBox "No se puede multiplicar las matrices: " & _ "El número de columnas de la primera matriz es " & _ "diferente al número de filas de la segunda " & _ "matriz.", vbExclamation, "Error" End If


Descargar ppt "VBA - Procedimientos Subprogramas (Procedimientos): Procedimientos Sub"

Presentaciones similares


Anuncios Google