Excel con VBA-4

download Excel con VBA-4

of 12

Transcript of Excel con VBA-4

  • 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