Está en la página 1de 12

Procedimientos Sub

Un procedimiento es una serie de instrucciones de VBA que residen


en un mdulo de VBA, al que se tiene acceso a travs del Editor VB.
Un mdulo puede tener cualquier nmero de procedimientos.
Un argumento es simplemente informacin que el procedimiento usa
y que se pasa al procedimiento cuando este se ejecuta.
DECLARAR UN PROCEDIMIENTO SUB

[Private | Public ] [Static] Sub nombre


[(lista_argumentos)]
[instrucciones]
[Exit Sub]
[instrucciones]
End Sub
Private. Opcional. Indica que el procedimiento es accesible slo para
otros procedimientos del mismo mdulo.
Public. Opcional. Indica que el procedimiento es accesible para todos
los dems procedimientos de todos los dems mdulos de un libro
de trabajo.
Ofimtica - Excel con VBA - Parte 4

Procedimientos Sub
Static. Opcional. Indica que las variables del procedimiento se
conservan cuando el procedimiento concluye.
Sub. Requerido. Palabra clave que indica el principio de un
procedimiento.
Nombre. Requerido. Cualquier nombre de procedimiento vlido (Igual
que las variables, pero no se pueden poer nombres de celdas, i.e.,
J34).
lista_argumentos. Opcional. Representa una lista de variables,
encerradas entre parntesis, que reciben argumentos pasados al
procedimiento. Para separar los argumentos se usa una coma.
Instrucciones. Opcional. Representa las instrucciones de VBA vlidas.
Exit Sub. Opcional. Una instruccin que fuerza una salida inmediata
del procedimiento antes de su conclusin formal.
End Sub. Requerido. Indica el fin del procedimiento.

Ofimtica - Excel con VBA - Parte 4

Ejecutar procedimientos Sub


Existen varias maneras de ejecutar un procedimiento Sub de VBA:

Con el comando Ejecutar, Ejecutar Sub/UserForm (en el Editor de VB), o


presionando la tecla de mtodo abreviado F5. Excel ejecuta el procedimiento
hasta la posicin del cursor. Este mtodo no funciona si el procedimiento
requiere uno o ms argumentos.

Desde el cuadro de dilogo Macro de Excel.

Con la combinacin de mtodo abreviado Control-tecla, asignada al


procedimiento.

Haciendo clic sobre el botn o forma de una hoja de clculo. Este botn o
forma debe tener un procedimiento asignado.

Desde otro procedimiento que se escriba.

Desde un botn de la barra de herramientas.

Desde un men personalizado que se desarrolle.

Cuando ocurre un evento. Estos eventos incluyen apertura del libro de trabajo,
guardar el libro de trabajo, cerrarlo, hacer un cambio a una celda, activar una
hoja y otros muchos temas.

Ofimtica - Excel con VBA - Parte 4

Ejecutar desde men


men personalizado
Excel proporciona dos maneras de personalizar sus mens: usando el
comando Ver, Barra de Herramientas, Personalizar, o escribiendo
un cdigo VBA.
EJEMPLO
Se supone que el nuevo elemento del men est en el men Datos,
que el texto del elemento del men es Abrir Archivo Cliente y que el
procedimiento se llama AbrirArchivoCliente
1) Seleccionar el comando Ver, Barras de Herramientas, Personalizar.
Excel presenta el cuadro de dilogo Personalizar.
2) Hacer clic sobre la ficha de Comandos del cuadro de dilogo
Personalizar.
3) Desplazarse por la lista de Categoras y hacer clic sobre Macros.
4) En la lista de Comandos, arrastrar el primer elemento (etiquetado
como Personalizar elemento de men) hasta el final del men
Datos.
5) Hacer clic con el botn derecho del ratn sobre el nuevo elemento
de men.

Ofimtica - Excel con VBA - Parte 4

Ejecutar desde men


men personalizado
6) Introducir un nombre para el nuevo elemento:
A&brir archivo cliente.
7) Hacer clic sobre Asignar macro sobre el men
contextual.
8) Seleccionar el procedimiento AbrirArchivoCliente de
la lista de macros.
9) Hacer clic sobre Aceptar del cuadro de dilogo
Asignar macro y hacer clic sobre Cerrar para cerrar
el cuadro de dilogo Personalizar.
Despus de seguir el proceso mencionado
anteriormente, el nuevo elemento de men siempre
aparecer en el mismo men (incluso cuando el libro
de trabajo que contiene la macro no est abierto).
Ofimtica - Excel con VBA - Parte 4

Ejecutar desde otro procedimiento


Se puede realizar de tres modos:
1) Introducir el nombre del procedimiento seguido por sus
parmetros (si los tuviese), separados por comas.
2) Usar la palabre clave Call, seguida del nombre del
procedimiento y despus sus parmetros (si los
tuviese) encerrados entre parntesis y separados
por comas.
3) Usar el mtodo Run del objeto Application. Este mtodo
es til cuando es necesario ejecutar un procedimiento y el
nombre del mismo est asigando a una variable.
Ejemplo del caso 1
Sub MiSub()
....Cdigo del procedimiento
ActualizarHoja
End Sub
Ofimtica - Excel con VBA - Parte 4

Sub ActualizarHoja()
....Cdigo del procedimiento
End Sub

Ejecutar desde otro procedimiento


Ejemplo del caso 2
Sub MiSub()
NumMes = InputBox(Nmero del Mes: )
Call ActualizarHoja(NumMes)
....Cdigo del procedimiento
End Sub
Sub ActualizarHoja(Mes)
....Cdigo del procedimiento
End Sub

Aunque es opcional, algunos


programadores siempre usan
la palabra Call, slo para que
quede perfectamente claro que
se est llamando a otro
procedimiento.

Ofimtica - Excel con VBA - Parte 4

Ejecutar desde otro procedimiento


Ejemplo del caso 3
Sub MiSub()
NumMes = InputBox(Nmero del Mes: )
Result = Application.Run (ActualizarHoja, NumMes)
....Cdigo del procedimiento
End Sub
Sub ActualizarHoja(Mes)
....Cdigo del procedimiento
End Sub

Ofimtica - Excel con VBA - Parte 4

Ejecutar desde otro procedimiento


Otro ejemplo del caso 3
Sub LlamadaVariable
Dim CualSub As String
CualSub = InputBox(Nombre de la Subrutina)
Call CualSub Lnea incorrecta!!!!
End Sub
Sub LlamadaVariable
Dim CualSub As String
CualSub = InputBox(Nombre de la Subrutina)
Application.Run(CualSub) Ahora funciona!!!!
End Sub

Ofimtica - Excel con VBA - Parte 4

Llamada desde otro m


mdulo
Si VBA no puede localizar un cdigo llamado en el
mdulo actual, busca en los procedimientos pblicos
de otros mdulos, en el mismo proyecto.
Si se necesita llamar a un procedimiento privado
dentro de otro procedimiento, ambos
procedimientos deben residir en el mismo mdulo.
No se puede tener dos procedimientos con el mismo
nombre en el mismo mdulo, pero se pueden tener
nombres idnticos en diferentes mdulos.
Por ejemplo :
Modulo1. MiSub
Call Modulo1.MiSub
Si no se diferencian los procedimientos que tienen el
mismo nombre, aparece un mensaje de error.
Ofimtica - Excel con VBA - Parte 4

10

Llamada desde otro libro de trabajo


En algunos casos, puede ser necesario que el procedimiento ejecute
otro procedimiento definido en un libro de trabajo diferente. Para
ello existen dos opciones:

Establecer una referencia al otro libro de trabajo

Usar el mtodo Run y especificar el nombre del libro de trabajo


explcitamente
Para aadir una referencia a otro libro de trabajo, se selecciona el
comando Herramientas, Referencia del Editor de VB, que presenta
una lista con todas las referencias disponibles, incluyendo todos los
libros de trabajo abiertos.
Simplemente se selecciona la casilla que corresponde al libro de
trabajo que se quiere aadir como una referencia y se hace clic en
Aceptar. Despus de establecer la referencia, se pueden llamar a
procedimientos del libro de trabajo como si estuviesen en el mismo
libro del procedimiento que llama.
Un libro de trabajo referenciado no tiene porqu estar abierto. Para
establecer una refrencia a un libro de trabajo que no est abierto,
se usa el botn Examinar del cuadro de dilogo Referencias.

Ofimtica - Excel con VBA - Parte 4

11

Llamada desde otro libro de trabajo

Ofimtica - Excel con VBA - Parte 4

12

Llamada desde otro libro de trabajo


Si se ha establecido una referencia aun libro de trabajo
que contiene el procedimiento SuSub, por ejemplo,
se puede usar cualquiera de las siguientes
instrucciones para llamar a SuSub:
SuSub
Call SuSub
Para una identificacin precisa de un procedimiento de
un libro de trabajo diferente, se especifica el nombre
del proyecto, el nombre del mdulo y el
procedimiento usando la siguiente sintaxis:
MiProject.MiModulo.MiSub
Call MiProject.MiModulo.MiSub
Otro modo de llamar a unprocedimiento de un libro de
trabajo diferente es usar el mtodo RUN:
Application.Run macrospresupuesto.xls!Consolidar
Ofimtica - Excel con VBA - Parte 4

13

Ejecutar desde ventana inmediato


Tambin se puede ejecutar un procedimiento mediante la
introduccin de su nombre en la ventana Inmediato
(Control-G). La ventana Inmediato ejecuta instrucciones
de VBA cuando se introducen en ella.
Este mtodo puede ser muy til cuando se est diseando
un procedimiento porque se pueden insertar comandos
para desplegar los resultados en la ventana Inmediato.
EJEMPLO
Sub CambiarCase
MiCadena = Esto es una prueba
MiCadena = Ucase(MiCadena)
Debug.Print MiCadena
End Sub

Ofimtica - Excel con VBA - Parte 4

14

Argumentos
Los datos pasados por un argumento pueden ser:
l Una variable
l Una constante
l Un literal
l Una mattriz
l Un objeto
EJEMPLO
Public Sub Saluda(Nombre As String)
MsgBox "Hola " & Nombre & "; esta usando " & Application.Name
End Sub
Al llamarla tenemos que suministrar un nombre de usuario. El
procedimiento Saludos llama al anterior de varias formas todas
ellas equivalentes y con el mismo resultado

Ofimtica - Excel con VBA - Parte 4

15

Argumentos
Sub Saludos()
Dim Nombre Usuario As Integer
Dim Nombres(10) As Integer
NombreUsuario = Jos Ruiz Hernandez
Nombres(1) = Jos Ruiz Hernandez
Call Saluda Jos Ruiz Hernandez
Call Saluda NombreUsuario
Call Saluda Nombres(1)
End Sub
Ofimtica - Excel con VBA - Parte 4

16

Argumentos
El siguiente ejemplo calcula la media de los elementos de
una matriz de una dimensin
Sub Media(num() As Integer)
Dim i as Integer, suma As Integer, c As Integer
For i = Lbound(num) to Ubond(num)
suma = suma + num(i)
c=c+1
Next
MsgBox La media es: & Str(suma/c)
End Sub
Sub LlamarMedia
Dim mat(5) As Integer
mat(1) = 4:mat(2) =5:mat(3) =8:mat(4) =1:mat(5) =2
media(mat)
End Sub

Ofimtica - Excel con VBA - Parte 4

17

Par
Parmetros por valor o por referencia
En el caso de pasar el dato de un parmetro como una
variable, el procedimiento receptor puede efectuar
modificaciones en el valor de la variable parmetro.
EJEMPLO
Sub Cuadrado(num As Long)
num = num * num
End Sub
Este procedimiento recibe un valor en el parmetro num el
cual es elevado al cuadrado. Si lo usamos del siguiente
modo:
Sub Llamar_a_Cuadrado()
Dim x As Long
x=5
Call Cudrado(x)
MsgBox Cuadrado del nmero: + Str(x)
End Sub

Ofimtica - Excel con VBA - Parte 4

18

Par
Parmetros por valor o por referencia
obtendremos el cuadrado del nmero: 25 y adems el nuevo valor de
la variable x ser 25.
Cuando el procedimiento llamado puede modificar las variables del
procedimiento que llama decimos que es un paso de parmetros
por referencia.
Si el procedimiento llamado no puede modificar el contenido de una
variable del procedimiento que llama se dice que el paso de
parmetros se hace por valor.
EJEMPLO
Sub Cuadrado(ByVal num As Long)
num = num * num
End Sub
Ahora el procedimiento Cuadrado no puede modificar el valor original
de la variable num, ya que los pasamos por valor (ByVal) y por
tanto no calcular nada.

Ofimtica - Excel con VBA - Parte 4

19

Par
Parmetros por valor o por referencia
Debemos modificarlo de la siguiente manera:
Sub Cuadrado(ByVal num As Long)
num = num * num
MsgBox Cuadrado del nmero: + Str(num)
End Sub
Sub Llamar_a_Cuadrado()
Dim x As Long
x=5
Call Cudrado(x)
End Sub
Si se pasa una variable definida como tipo de dato
definido por el usuario a un procedimiento, se tiene
que pasar por referencia. Intentar pasarla por valor
genera un error.
Ofimtica - Excel con VBA - Parte 4

20

10

Par
Parmetros por valor o por referencia
UN EJEMPLO REAL
El objetivo de este ejercicio es disear una utilidad que ordene las
hojas de un libro de trabajo por orden alfabtico.
Requerimientos del proyecto
Debe clasificar las hojas de un libro de trabajo activo, en orden
ascendente.
Debe ser muy fcil de ejecutar
Siempre debe estar disponible. En otras palabras, el usuario no
tiene por que abrir un libro de trabajo para emplear esta utilidad.
Debe funcionar adecuadamente para cualquier libro de trabajo
abierto.
No debe presentar ningn mensaje de error de VBA.
Lo que sabemos
A menudo, la parte ms difcil del proyecto es saber por dnde
empezar. En este caso hemos empezado por hacer una lista de lo
que se sabe acerca de Excel que pueda ser relevante para los
requerimientos del proyecto:

Ofimtica - Excel con VBA - Parte 4

21

Par
Parmetros por valor o por referencia
Lo que sabemos
Excel no tiene comandos que ordenen hojas
Se puede mover una hoja fcilmente, arrastrando su etiqueta de
hoja.
l

Nota a tener en cuenta: activar el Grabador de macros y arrastrar una


hoja a una situacin para encontrar el tipo de cdigo que genera esta
accin.

Es necesario saber cuntas hojas hay en el libro. Esta informacin se


puede obtener con VBA.
Es necesario saber el nombre de todas las hojas. Esto tambin se
puede obtener con VBA.
Excel tiene un comando que ordena los datos de las celdas en una
hoja de clculo.

Nota a tener en cuenta: que se pueden transferir los datos a un rango y


usar esta opcin, o tal vez VBA tiene un mtodo de ordenacin que se
puede aprovechar.

Gracias al cuadro de dilogo opciones de la macro, es fcil asignar


una tecla de mtodo abreviado a una macro.
Si se guarda una macro en el Libro de macros personal, siempre
estar disponible.

Ofimtica - Excel con VBA - Parte 4

22

11

Par
Parmetros por valor o por referencia
El planteamiento
A pesar de no saber an exactamente cmo
proceder, se puede intentar planear una
estructura preliminar que describa las tareas
generales requeridas:
1) Identificar el libro de trabajo activo
2) obtener una lista de los nombres de las hojas
de clculo de un libro
3) Contar las hojas
4) Ordenarlas
Lo que se necesita saber
Cmo identificar el libro de trabajo activo
Cmo contar las hojas del libro de trabajo activo
Cmo obtener una lista de lo nombres de las hojas
Como ordenar la lista
Ofimtica - Excel con VBA - Parte 4

23

12

También podría gustarte