excel con vba-4
TRANSCRIPT
-
8/16/2019 Excel con VBA-4
1/12
Ofimática - Excel con VBA - Parte 4 1
ProcedimientosProcedimientos SubSubUn procedimiento es una serie de instrucciones de VBA que residen
en un módulo de VBA, al que se tiene acceso a través del Editor VB.Un módulo puede tener cualquier número de procedimientos.
Un argumento es simplemente información que el procedimiento usay 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 sólo paraotros procedimientos del mismo módulo.
Public. Opcional. Indica que el procedimiento es accesible para todoslos demás procedimientos de todos los demás módulos de un librode trabajo.
Ofimática - Excel con VBA - Parte 4 2
ProcedimientosProcedimientos SubSubStatic. 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 válido (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 paréntesis, que reciben argumentos pasados alprocedimiento. Para separar los argumentos se usa una coma.
Instrucciones. Opcional. Representa las instrucciones de VBA válidas.Exit Sub. Opcional. Una instrucción que fuerza una salida inmediata
del procedimiento antes de su conclusión formal.End Sub. Requerido. Indica el fin del procedimiento.
-
8/16/2019 Excel con VBA-4
2/12
Ofimática - Excel con VBA - Parte 4 3
Ejecutar procedimientosEjecutar procedimientos SubSubExisten 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 método abreviado F5. Excel ejecuta el procedimientohasta la posición del cursor. Este método no funciona si el procedimiento
requiere uno o más argumentos.• Desde el cuadro de diálogo Macro de Excel.• Con la combinación de método abreviado Control-tecla, asignada al
procedimiento.• Haciendo clic sobre el botón o forma de una hoja de cálculo. Este botón o
forma debe tener un procedimiento asignado.• Desde otro procedimiento que se escriba.• Desde un botón 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.
Ofimática - Excel con VBA - Parte 4 4
Ejecutar desde menEjecutar desde men úú personalizadopersonalizadoExcel proporciona dos maneras de personalizar sus menús: usando el
comando Ver, Barra de Herramientas, Personalizar, o escribiendoun código VBA.
EJEMPLOSe 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 elprocedimiento se llama AbrirArchivoCliente
1) Seleccionar el comando Ver, Barras de Herramientas, Personalizar.Excel presenta el cuadro de diálogo Personalizar.
2) Hacer clic sobre la ficha de Comandos del cuadro de diálogoPersonalizar.
3) Desplazarse por la lista de Categorías 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 botón derecho del ratón sobre el nuevo elementode menú.
-
8/16/2019 Excel con VBA-4
3/12
Ofimática - Excel con VBA - Parte 4 5
Ejecutar desde menEjecutar desde men úú personalizadopersonalizado
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 dela lista de macros.
9) Hacer clic sobre Aceptar del cuadro de diálogoAsignar macro y hacer clic sobre Cerrar para cerrarel cuadro de diálogo Personalizar.
Después de seguir el proceso mencionadoanteriormente, el nuevo elemento de menú siempre
aparecerá en el mismo menú (incluso cuando el librode trabajo que contiene la macro no esté abierto).
Ofimática - Excel con VBA - Parte 4 6
Ejecutar desde otro procedimientoEjecutar desde otro procedimientoSe puede realizar de tres modos:1) Introducir el nombre del procedimiento seguido por sus
parámetros (si los tuviese), separados por comas.2) Usar la palabre clave Call, seguida del nombre del
procedimiento y después sus parámetros (si lostuviese) encerrados entre paréntesis y separadospor comas.
3) Usar el método Run del objeto Application. Este métodoes útil cuando es necesario ejecutar un procedimiento y elnombre del mismo está asigando a una variable.
Ejemplo del caso 1
Sub MiSub()´ ....Código del procedimientoActualizarHoja
End Sub
Sub ActualizarHoja()´ ....Código del procedimiento
End Sub
-
8/16/2019 Excel con VBA-4
4/12
Ofimática - Excel con VBA - Parte 4 7
Ejecutar desde otro procedimientoEjecutar desde otro procedimientoEjemplo del caso 2Sub MiSub()
NumMes = InputBox(“Número del Mes: ”)Call ActualizarHoja(NumMes)
´ ....Código del procedimientoEnd Sub
Sub ActualizarHoja(Mes)´ ....Código del procedimiento
End Sub
Aunque es opcional, algunos programadores siempre usanla palabra Call , sólo para que
quede perfectamente claro quese está llamando a otro
procedimiento.
Ofimática - Excel con VBA - Parte 4 8
Ejecutar desde otro procedimientoEjecutar desde otro procedimiento
Ejemplo del caso 3Sub MiSub()
NumMes = InputBox(“Número del Mes: ”)Result = Application.Run (“ActualizarHoja”, NumMes)´ ....Código del procedimiento
End Sub
Sub ActualizarHoja(Mes)´ ....Código del procedimiento
End Sub
-
8/16/2019 Excel con VBA-4
5/12
Ofimática - Excel con VBA - Parte 4 9
Ejecutar desde otro procedimientoEjecutar desde otro procedimiento
Otro ejemplo del caso 3Sub LlamadaVariable
Dim CualSub As String
CualSub = InputBox(“Nombre de la Subrutina”)Call CualSub ´Línea incorrecta!!!!
End Sub
Sub LlamadaVariableDim CualSub As StringCualSub = InputBox(“Nombre de la Subrutina”)Application.Run(CualSub) ´Ahora funciona!!!!
End Sub
Ofimática - Excel con VBA - Parte 4 10
Llamada desde otro mLlamada desde otro m óó duloduloSi VBA no puede localizar un código llamado en el
módulo actual, busca en los procedimientos públicosde otros módulos, en el mismo proyecto.
Si se necesita llamar a un procedimiento privadodentro de otro procedimiento, ambosprocedimientos deben residir en el mismo módulo.
No se puede tener dos procedimientos con el mismonombre en el mismo módulo, pero se pueden tener
nombres idénticos en diferentes módulos.Por ejemplo :
Modulo1. MiSubCall Modulo1.MiSub
Si no se diferencian los procedimientos que tienen elmismo nombre, aparece un mensaje de error.
-
8/16/2019 Excel con VBA-4
6/12
Ofimática - Excel con VBA - Parte 4 11
Llamada desde otro libro de trabajoLlamada desde otro libro de trabajoEn algunos casos, puede ser necesario que el procedimiento ejecute
otro procedimiento definido en un libro de trabajo diferente. Paraello existen dos opciones:
– Establecer una referencia al otro libro de trabajo
– Usar el método Run y especificar el nombre del libro de trabajoexplícitamentePara añadir una referencia a otro libro de trabajo, se selecciona el
comando Herramientas, Referencia del Editor de VB, que presentauna lista con todas las referencias disponibles, incluyendo todos loslibros de trabajo abiertos.
Simplemente se selecciona la casilla que corresponde al libro detrabajo que se quiere añadir como una referencia y se hace clic enAceptar. Después de establecer la referencia, se pueden llamar aprocedimientos del libro de trabajo como si estuviesen en el mismolibro 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 botón Examinar del cuadro de diálogo Referencias.
Ofimática - Excel con VBA - Parte 4 12
Llamada desde otro libro de trabajoLlamada desde otro libro de trabajo
-
8/16/2019 Excel con VBA-4
7/12
Ofimática - Excel con VBA - Parte 4 13
Llamada desde otro libro de trabajoLlamada desde otro libro de trabajoSi se ha establecido una referencia aun libro de trabajo
que contiene el procedimiento SuSub, por ejemplo,se puede usar cualquiera de las siguientesinstrucciones para llamar a SuSub:
SuSubCall SuSubPara una identificación precisa de un procedimiento de
un libro de trabajo diferente, se especifica el nombredel proyecto, el nombre del módulo y elprocedimiento usando la siguiente sintaxis:
MiProject.MiModulo.MiSubCall MiProject.MiModulo.MiSubOtro modo de llamar a unprocedimiento de un libro de
trabajo diferente es usar el método RUN:
Application.Run “´macrospresupuesto.xls´!Consolidar”
Ofimática - Excel con VBA - Parte 4 14
Ejecutar desde ventana inmediatoEjecutar desde ventana inmediatoTambién se puede ejecutar un procedimiento mediante la
introducción de su nombre en la ventana Inmediato(Control-G). La ventana Inmediato ejecuta instruccionesde VBA cuando se introducen en ella.
Este método puede ser muy útil cuando se está diseñandoun procedimiento porque se pueden insertar comandospara desplegar los resultados en la ventana Inmediato.
EJEMPLOSub CambiarCase
MiCadena = “Esto es una prueba” MiCadena = Ucase(MiCadena)Debug.Print MiCadena
End Sub
-
8/16/2019 Excel con VBA-4
8/12
Ofimática - Excel con VBA - Parte 4 15
ArgumentosArgumentosLos datos pasados por un argumento pueden ser:
l Una variablel Una constantel Un literall Una mattrizl Un objeto
EJEMPLOPublic Sub Saluda(Nombre As String)
MsgBox "Hola " & Nombre & "; esta usando " & Application.NameEnd Sub
Al llamarla tenemos que suministrar un nombre de usuario. Elprocedimiento Saludos llama al anterior de varias formas todasellas equivalentes y con el mismo resultado
Ofimática - Excel con VBA - Parte 4 16
ArgumentosArgumentos
Sub Saludos()
Dim Nombre Usuario As IntegerDim Nombres(10) As IntegerNombreUsuario = “José Ruiz Hernandez” Nombres(1) = “José Ruiz Hernandez” Call Saluda “José Ruiz Hernandez” Call Saluda NombreUsuarioCall Saluda Nombres(1)
End Sub
-
8/16/2019 Excel con VBA-4
9/12
Ofimática - Excel con VBA - Parte 4 17
ArgumentosArgumentos
El siguiente ejemplo calcula la media de los elementos deuna matriz de una dimensión
Sub Media(num() As Integer)Dim i as Integer, suma As Integer, c As IntegerFor i = Lbound(num) to Ubond(num)
suma = suma + num(i)c = c + 1
NextMsgBox “La media es: “ & Str(suma/c)
End SubSub LlamarMedia
Dim mat(5) As Integermat(1) = 4:mat(2) =5:mat(3) =8:mat(4) =1:mat(5) =2media(mat)
End Sub
Ofimática - Excel con VBA - Parte 4 18
Par Par áá metros por valor o por referenciametros por valor o por referencia
En el caso de pasar el dato de un parámetro como unavariable, el procedimiento receptor puede efectuarmodificaciones en el valor de la variable parámetro.
EJEMPLOSub Cuadrado(num As Long)
num = num * numEnd SubEste procedimiento recibe un valor en el parámetro num el
cual es elevado al cuadrado. Si lo usamos del siguientemodo:
Sub Llamar_a_Cuadrado()Dim x As Longx = 5Call Cudrado(x)MsgBox “Cuadrado del número: “+ Str(x)
End Sub
-
8/16/2019 Excel con VBA-4
10/12
Ofimática - Excel con VBA - Parte 4 19
Par Par áá metros por valor o por referenciametros por valor o por referenciaobtendremos el cuadrado del número: 25 y además 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 parámetrospor referencia .
Si el procedimiento llamado no puede modificar el contenido de unavariable del procedimiento que llama se dice que el paso deparámetros se hace por valor .
EJEMPLOSub Cuadrado(ByVal num As Long)
num = num * numEnd SubAhora el procedimiento Cuadrado no puede modificar el valor original
de la variable num, ya que los pasamos por valor (ByVal) y portanto no calculará nada.
Ofimática - Excel con VBA - Parte 4 20
Par Par áá metros por valor o por referenciametros por valor o por referencia
Debemos modificarlo de la siguiente manera:Sub Cuadrado(ByVal num As Long)
num = num * numMsgBox “Cuadrado del número: “+ Str(num)
End Sub
Sub Llamar_a_Cuadrado()Dim x As Longx = 5Call Cudrado(x)
End SubSi se pasa una variable definida como tipo de dato
definido por el usuario a un procedimiento, se tieneque pasar por referencia. Intentar pasarla por valorgenera un error.
-
8/16/2019 Excel con VBA-4
11/12
Ofimática - Excel con VBA - Parte 4 21
Par Par áá metros por valor o por referenciametros por valor o por referenciaUN EJEMPLO REALEl objetivo de este ejercicio es diseñar una utilidad que ordene las
hojas de un libro de trabajo por orden alfabético.Requerimientos del proyecto¡ Debe clasificar las hojas de un libro de trabajo activo, en orden
ascendente.¡ Debe ser muy fácil 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 ningún mensaje de error de VBA.Lo que sabemosA menudo, la parte más difícil del proyecto es saber por dónde
empezar. En este caso hemos empezado por hacer una lista de lo
que se sabe acerca de Excel que pueda ser relevante para losrequerimientos del proyecto:
Ofimática - Excel con VBA - Parte 4 22
Par Par áá metros por valor o por referenciametros por valor o por referenciaLo que sabemos¡ Excel no tiene comandos que ordenen hojas¡ Se puede mover una hoja fácilmente, arrastrando su etiqueta de
hoja.l Nota a tener en cuenta: activar el Grabador de macros y arrastrar una
hoja a una situación para encontrar el tipo de código que genera estaacción.
¡ Es necesario saber cuántas hojas hay en el libro. Esta información sepuede obtener con VBA.
¡ Es necesario saber el nombre de todas las hojas. Esto también sepuede obtener con VBA.¡ Excel tiene un comando que ordena los datos de las celdas en una
hoja de cálculo.l Nota a tener en cuenta: que se pueden transferir los datos a un rango y
usar esta opción, o tal vez VBA tiene un método de ordenación que sepuede aprovechar.
¡ Gracias al cuadro de diálogo opciones de la macro, es fácil asignaruna tecla de método abreviado a una macro.
¡ Si se guarda una macro en el Libro de macros personal, siempreestará disponible.
-
8/16/2019 Excel con VBA-4
12/12
Ofimática - Excel con VBA - Parte 4 23
Par Par áá metros por valor o por referenciametros por valor o por referenciaEl planteamientoA pesar de no saber aún exactamente cómo
proceder, se puede intentar planear unaestructura preliminar que describa las tareas
generales requeridas:1) Identificar el libro de trabajo activo2) obtener una lista de los nombres de las hojas
de cálculo de un libro3) Contar las hojas4) Ordenarlas
Lo que se necesita saber¡ Cómo identificar el libro de trabajo activo¡ Cómo contar las hojas del libro de trabajo activo¡ Cómo obtener una lista de lo nombres de las hojas¡ Como ordenar la lista