Vous êtes sur la page 1sur 18

SESIN N 4

o Implementar Funciones definidas por el usuario o funciones


Personalizadas.
o Exportar e Importar cdigo VBA entre libros de Excel.
o Definir Cdigo VBA como complemento.
o Implementar un control de Guas y Amortizaciones

MACROS EN EXCEL 2013

FUNCIONES DEFINIDAS POR EL USUARIO


Una funcin es un procedimiento VBA que devuelve un valor. Una funcin acepta argumentos, como
pueden ser constantes, variables o expresiones que le pasa el procedimiento que efecta la llamada.
Podemos usar estas funciones en el cdigo VBA o en frmulas.
Los procedimientos Function, suelen devolver un solo valor, igual que las funciones de hoja de Excel y
las funciones integradas de VBA. Al igual que las funciones integradas, los procedimientos Function
generalmente usan de uno a ms argumentos.

Sintaxis:
La sintaxis para declarar una funcin es la siguiente:
[Public] [Private] [Static] Function nombre (Argumentos) [As Type]
Instrucciones
[Nombre = expresin]
[Exit Function]
Instrucciones
End Function

En donde:
Public: Indica que el procedimiento Function esta accesible para todos los dems procedimientos, en
todos los dems mdulos y en todos los proyectos activos de VBA. Es opcional.
Private: Indica que el procedimiento Function est accesible slo para otros procedimientos en el
mismo mdulo. Es opcional.
Static: Indica que los valores de las variables declaradas en el procedimiento Function estn guardados
entre llamadas. Es opcional.
Function: Es la palabra clave que indica el principio de un procedimiento Function que devuelve un
valor u otro dato. Es obligatorio.
Nombre: Identifica el nombre de la funcin definida por el usuario. El nombre de las funciones
definidas por el usuario se ajusta a las mismas reglas aplicadas a los nombres de rango, en una hoja de
trabajo, al de los procedimientos Sub y al de los nombres de variables de memoria, as por ejemplo
debe empezar con una letra o el carcter subrayado, no acepta espacios en blanco, no se deb utilizar
palabras reservadas de las sentencias de VBA ni los nombres de la funciones de Excel, etc. Es de uso
obligatorio.
Argumentos: Representa una lista de una o ms variables que recogen los datos que utilizar la funcin
para realizar los clculos, se expresan en los parntesis y se separan con comas si son ms de uno.
Type: Es el tipo de datos que se devuelve por el procedimiento Function. Es opcional.
Instrucciones: Representa las instrucciones o sentencias de VBA que se ejecutarn.

Pg. 2/18

MACROS EN EXCEL 2013

Exit Function: Es una declaracin que obliga la salida inmediata del procedimiento Function aunque
no se complete. Es opcional.
End Function: Palabra clave que indica el final del procedimiento.

Por qu crear Funciones Definidas por el Usuario?


Con todas las funciones disponibles en Excel y VBA, quizs se pregunte por qu necesitaramos crear
nuevas funciones. La respuesta es: para simplificar el trabajo.
Por ejemplo, a menudo podremos crear funciones personalizadas que reduzcan de forma significativa
las frmulas. Cuando creemos aplicaciones, podemos apreciar que algunos procedimientos repiten
ciertos clculos. En este caso, deberamos considerar la posibilidad de crear una funcin personalizada
que realice el clculo. Entonces, podramos simplemente llamar a la funcin desde un procedimiento.
Una funcin personalizada puede eliminar la necesidad de repetir cdigo, reduciendo de esta forma
los errores.

Una Funcin Personalizada


El siguiente ejemplo es una funcin personalizada definida en un mdulo VBA. Esta funcin, llamada
PrecioVenta, usa un argumento. La funcin calcula el precio de venta tomando como argumentos el
precio de costo y el margen de utilidad de un determinado producto.
Function PrecioVenta(PrecioCosto, MargenUtilidad) As Single
PrecioVenta = PrecioCosto + PrecioCosto * MargenUtilidad
End Function

Usar la Funcin Personalizada en una Hoja


Se puede escribir la funcin:

O bien, la funcin funciona de forma muy parecida a una funcin integrada en una hoja. Podemos
introducirla en una frmula usando Insertar>Funcin o hacer clic en el botn Pegar Funcin (situado
en la barra de frmulas). Cualquiera de estas acciones mostrar el cuadro de dilogo de Insertar
Funcin, las funciones personalizadas se ubican, por defecto, en la categora Definida por el usuario.

Pg. 3/18

MACROS EN EXCEL 2013

Seleccione la funcin definida por el usuario a usar, si hubieran varias, luego haga clic en el botn
Aceptar.
En la siguiente ventana, indique las celdas que se utilizarn como argumentos y haga clic en el
botn Aceptar.

Aadir una descripcin de una funcin


Cuando seleccionamos una funcin en el cuadro de dilogo Inserta Funcin, aparecer una breve
descripcin de la funcin. Podemos especificar una descripcin de las funciones personalizadas
realizando los siguientes pasos:
1. Crear una funcin personalizada
2. Haga clic en la ficha Desarrollador
Pg. 4/18

MACROS EN EXCEL 2013

3. Seleccione la opcin Macros del grupo Cdigo.


El cuadro de dilogo Macro enumerar los
procedimientos disponibles, pero nuestras
funciones no estarn en la lista.
4. Escribir el nombre de la funcin en el cuadro
Nombre de la macro
5. Haga clic en el botn Opciones para que
aparezca el cuadro de dilogo Opciones de la
macro.
6. Introducir la descripcin de la funcin en el
cuadro Descripcin. El campo Tecla mtodo abreviado no es relevante para las funciones.

Ahora, cuando se invoque a la funcin personaliza, se mostrar de la siguiente manera:

Aplicacin
La siguiente aplicacin es una funcin personalizada llamada PromedioUnidad, usa tres argumentos.
La funcin calcula el promedio de una unidad formativa de una determinada asignatura.
Function PromedioUnidad (Trabajo, Practica, Examen) As Single
PromedioUnidad = (Trabajo + Practica * 2 + Examen * 3) / 6
End Function
Pg. 5/18

MACROS EN EXCEL 2013

Importar y Exportar mdulos


Los ejemplos que hemos visto, son funciones que pueden ser utilizadas en multitud de ocasiones o
situaciones, sera interesante tenerlos disponibles en cualquiera de las hojas que confeccionemos.
Podra pensar en utilizar las opciones de copiar y pegar para pasar procedimientos y/o funciones de
una hoja a otra, es un mtodo totalmente vlido y efectivo, pero le proponemos a continuacin otro
mtodo ms "profesional", por llamarlo de otra manera, e igual de efectivo. Este mtodo consiste en
guardar las funciones de un mdulo en un archivo aparte, es decir, independiente de cualquier hoja
de clculo, luego, cuando en una nueva hoja necesite estas funciones, solo deber importar este
archivo para incorporarlo.
Exportar un mdulo. Guardar un mdulo en un archivo.
1. Como ejemplo, abra la hoja donde puso las funciones.
2. Pase al editor de Visual Basic y active el mdulo a exportar.
3. Active opcin de la barra de mens Archivo/ Exportar archivo. Aparece el cuadro de dilogo:

4. En cuadro de edicin Nombre, escribe el nombre para el archivo donde se guardar el mdulo,
por ejemplo "MisFunciones.Bas", observe que .bas es la extensin de estos archivos.

Pg. 6/18

MACROS EN EXCEL 2013

5. Haz clic en el botn Guardar.


Importar un mdulo.
1. Si est siguiendo el ejemplo, cierre todos los archivos de Excel y abra uno nuevo.
2. Active el editor Visual Basic.
3. Active opcin de la barra de mens Archivo/ Importar Archivo. Aparece el cuadro de dilogo:

4. Seleccione en la lista Buscar en: la carpeta donde tiene ubicado el archivo a importar (la
carpeta donde est "MisFunciones.Bas" si est siguiendo el ejemplo).
5. Una vez localizada la carpeta, seleccione el archivo a importar (MisFunciones.Bas en el
ejemplo) y pulse sobre Abrir.
6. Observe como en la ventana de proyecto se ha incorporado un nuevo mdulo que contiene
todos los procedimientos y funciones del archivo importado.
Complementos de Microsoft Excel
Una vez creadas las funciones que su organizacin requieran, es posible crear un complemento
de Excel (archivo XLAM) que permite usar dichas funciones en cualquier libro en que las necesite.
Los complementos son programas suplementarios que agregan funciones o comandos
personalizados a Microsoft Excel.
Guardar su Libro de Excel como Complemento
Al guardar su libro de Excel como complemento, asegura que las funciones que desarroll estn
disponibles en otros libros de Excel.

Pg. 7/18

MACROS EN EXCEL 2013

1. Primero, guardar el Libro como un Libro de Excel habilitado para macros


2. Luego, haga clic en el botn de Archivo.
3. Seleccione la opcin Guardar como.
4. Escriba un nombre para su complemento y en el cuadro Tipo de archivo, seleccione
Complemento de Microsoft Excel.

Nota: Por defecto los complementos que usted crea se almacenan en la carpeta:
C:\Users\nombre_del_usuario\AppData\Roaming\Microsoft\Complementos
Activar el Complemento
Una vez creado el complemento, se debe activar
para usar las funciones creadas en l.
1. Clic en el botn de Archivo
2. Clic en el botn Opciones
3. Clic en la opcin Complementos
4. Clic en el botn Ir
5. Active

la

casilla

correspondiente

al

complemento creado

Pg. 8/18

MACROS EN EXCEL 2013

EJERCICIOS PROPUESTOS
ENUNCIADO 1
Crear una funcin que acepte como argumento el Monto de Prstamo y el Sueldo. La funcin debe
devolver Aprobado si el prstamo es inferior a 4 veces al sueldo. En otro caso devolver No
Aprobado.
=ESTADO(3000,1200) devolver Aprobado
Porque el prstamo solicitado (3 mil) no excede 4 veces el sueldo (1200)

ENUNCIADO 2
Se pide crear una funcin en la que se enve como argumentos el Sueldo bsico y las Horas trabajadas.
Esta funcin debe devolver el Importe de Horas Extras (considere que el sueldo bsico se refiere a 160
horas al mes y que la hora extra se paga 50% adicional a las horas normales). As, la funcin debe ser
usada:
=EXTRAS(1600,170)

devolver 150.

Porque si gana 1600 al mes, por hora gana 1600/160=10


Por hora extra gana 505 adicional, o sea 15.
Entonces como tiene 10 horas extras (170 160), el importe ser 150.

Pg. 9/18

MACROS EN EXCEL 2013

Pg. 10/18

MACROS EN EXCEL 2013

APLICACIONES RESUELTAS
CONTROL DE GUAS Y AMORTIZACIONES
Agregue los siguientes encabezados a las hojas VENTAS y AMORTIZACIONES.

Pg. 11/18

MACROS EN EXCEL 2013

Agregue el siguiente UserForm1

txtGua
txtCliente

txtFecha
txtMonto
btnSalir

btnAceptar

btnNuevo

PROGRAMANDO LOS CONTROLES


Private Sub UserForm_Activate()
' Date retorna la fecha del sistema
txtFecha.Text = Date
End Sub
Private Sub btnAceptar_Click()
Sheets("VENTAS").Activate
Range("A4").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = TXTGUIA Then
Sheets("FORMULARIOS").Activate
MsgBox "GUIA YA EXISTENTE"
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
If txtGua.Text = "" Then
Sheets("FORMULARIOS").Activate
MsgBox "OLVIDO INGRESAR N DE GUIA"
Exit Sub
End If
If txtCliente = "" Then
Sheets("FORMULARIOS").Activate

Pg. 12/18

MACROS EN EXCEL 2013

MsgBox "OLVIDO INGRESAR CLIENTE"


Exit Sub
End If
If txtMonto = "" Then
Sheets("FORMULARIOS").Activate
MsgBox "OLVIDO INGRESAR MONTO"
Exit Sub
End If
ActiveCell.Offset(0, 0) = txtGua.Text
ActiveCell.Offset(0, 1) = txtCliente.Text
ActiveCell.Offset(0, 2) = txtFecha.Text
ActiveCell.Offset(0, 3) = Val(txtMonto.Text)
Sheets("FORMULARIOS").Activate
Application.StatusBar = "INFORMACION ALMACENADA"
MsgBox "Datos Almacenados" _
& Chr(10) & Chr(10) & "Clic en Nuevo para aadir otro registro." _
& Chr(10) & Chr(10) & "Observe la lnea de Status", _
vbInformation, _
"Lee Con Atencin:"
Application.StatusBar = ""
End Sub

Private Sub btnNuevo_Click()


txtGua.Text = ""
txtCliente.Text = ""
txtFecha.Text = Date
txtMonto.Text = ""
txtGua.SetFocus
End Sub

Private Sub btnSalir_Click()


End
End Sub

Pg. 13/18

MACROS EN EXCEL 2013

Agregue el siguiente UserForm2

cboGua

txtFecha
txtCliente

txtSaldo
btnAceptar

btnSalir

btnNuevo
PROGRAMANDO LOS CONTROLES
Private Sub UserForm_Activate()
txtFecha.Text = Date
Sheets("VENTAS").Activate
Range("A4").Select
' Llena el control cboGua con todos los Nmeros de guas
Do While ActiveCell.Value <> ""
' Se usa el mtodo AddItem para aadir elementos al control ComboBox
cboGua.AddItem ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
Sheets("FORMULARIOS").Activate
End Sub
Private Sub cboGua_Change()
' Este procedimiento se ejecuta cuando se selecciona un elemento
' del cuadro combinado
Sheets("VENTAS").Activate
Range("A4").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = cboGua.Text Then ' si la celda activa es igual a la gua seleccionada
txtCliente = ActiveCell.Offset(0, 1)
Sheets("FORMULARIOS").Activate
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Private Sub btnAceptar_Click()
Dim M As Single, A As Single, AA As Single
If Val(txtAmortizacin) <= 0 Then

Pg. 14/18

MACROS EN EXCEL 2013

MsgBox "Debe ingresar nmero mayor a cero", vbCritical, "Mensaje de Error"


txtAmortizacin.SetFocus
Exit Sub
End If
'Actualizando Stock en la hoja Ventas
Sheets("VENTAS").Activate
Range("A4").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = cboGua.Text Then
'Capturando el Monto
M = ActiveCell.Offset(0, 3).Value
'Capturando la Amortizacin
A = ActiveCell.Offset(0, 4).Value
If M - (A + Val(txtAmortizacin)) < 0 Then
MsgBox "El monto de " & txtAmortizacin & " es mayor que el saldo" & _
Chr(10) & "El saldo Actual es de: " & Format(ActiveCell.Offset(0, 5).Value, "Standard"), _
vbCritical, "Mensaje de Error"
txtAmortizacin.Text = Empty
txtAmortizacin.SetFocus
Exit Sub
End If
'Actualizando amortizacin
ActiveCell.Offset(0, 4) = Val(txtAmortizacin) + A
'Capturando la Amortizacin actual
AA = ActiveCell.Offset(0, 4)
'Actualizando Saldo
ActiveCell.Offset(0, 5) = M - AA
txtSaldo.Text = M - AA
Sheets("FORMULARIOS").Activate
Exit Do
End If
ActiveCell.Offset(1, 0).Select
Loop
'Copiando en la hoja Amortizaciones
Sheets("AMORTIZACIONES").Activate
Range("A4").Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select

Pg. 15/18

MACROS EN EXCEL 2013

Loop
'Copiando registro
ActiveCell.Offset(0, 0) = cboGua.Text
ActiveCell.Offset(0, 1) = txtCliente.Text
ActiveCell.Offset(0, 2) = txtFecha.Text
' Se convierte lo ingresado como texto a valor usando funcin VAL
ActiveCell.Offset(0, 3) = Val(txtAmortizacin.Text)
Sheets("FORMULARIOS").Activate
End Sub
Private Sub btnNuevo_Click()
cboGua.Text = Empty
txtCliente.Text = Empty
txtFecha.Text = DATE
txtAmortizacin.Text = Empty
txtSaldo.Text = Empty
cboGua.SetFocus
End Sub
Private Sub btnSalir_Click()
End
End Sub

Pg. 16/18

MACROS EN EXCEL 2013

Aadir el siguiente UserForm3

cboGua
txtCliente
txtMonto

txtAmortizaciones

lstDetalle

btnMostrar
btnSalir

PROGRAMANDO LOS CONTROLES


Private Sub UserForm_Activate()
Sheets("VENTAS").Activate
Range("A4").Select
Do While ActiveCell.Value <> ""
cboGua.AddItem ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
Sheets("FORMULARIOS").Activate
End Sub
Private Sub cboGua_Change()
' Limpia el cuadro de lista Actual
lstDetalle.Clear
Sheets("VENTAS").Activate
Range("A4").Select
' Llena el cuadro de lista con la gua seleccionada
Do While ActiveCell.Value <> ""
If ActiveCell.Value = cboGua.Text Then
txtCliente = ActiveCell.Offset(0, 1)
txtMonto = ActiveCell.Offset(0, 3)
txtAmortizaciones.Text = ActiveCell.Offset(0, 4)
Sheets("FORMULARIOS").Activate
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Pg. 17/18

MACROS EN EXCEL 2013

Private Sub btnMostrar_Click()


'
' Se borra antes el detalle
' Por si acaso el usuario de clic varias veces en Mostrar
'
lstDetalle.Clear
' Llenando la lista con lo amortizado
Sheets("AMORTIZACIONES").Activate
Range("A4").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = cboGua.Text Then
' Se puede usar en format:
' General Number, Fixed, Standard, Currency, Percent
lstDetalle.AddItem ActiveCell.Offset(0, 2) & vbTab & Format(ActiveCell.Offset(0, 3), "Standard")
End If
ActiveCell.Offset(1, 0).Select
Loop
Sheets("FORMULARIOS").Activate
End Sub
Private Sub btnSalir_Click()
End
End Sub

AADIR UN MDULO Y CREA LAS SIGUIENTES MACROS:


Sub INGRESO()
frmIngreso.Show
End Sub

Sub AMORTIZACION()
frmAmortizacin.Show
End Sub

Sub DETALLE()
frmDetalle.Show
End Sub

En la hoja FORMULARIOS agrega los controles que se han indicado al inicio de la aplicacin y asigna
a cada uno de ellos las macros correspondientes anteriormente creadas.

Pg. 18/18

Vous aimerez peut-être aussi