Está en la página 1de 3

Mdulos, procedimientos, subrutinas y mdulos de clases

Algo que normalmente me suelen preguntar mis alumnos es la diferencia entre


mdulos y procedimientos en VBA. Un mdulo se utiliza para recopilar bajo un
nombre un conjunto de declaraciones, instrucciones y/o procedimientos. Aplicado
al ejemplo de nuestra primera macro Hola Mundo, el mdulo lo podamos titular

Sub saludo() Sub de subrutina, el nombre de nuestro mdulo


Dim saludo As String declaracin de nuestra variable
saludo = MsgBox(Hola Mundo, vbCritical, Mi saludo) instruccin
End Sub

Ahora qu es un mdulo de clase? Es una plantilla con la que crear objetos.

Definir todas las caractersticas que quisiramos que nuestro objeto final
tuviera. Por ejemplo: podemos tener una clase llamada clsEmpleados en el cual
deseamos tener todas las caractersticas con respecto a un empleado. Como
propiedades podramos definir: nombre, apellidos, domicilio, edad, casado, sueldo,
fechaIngreso, Antiguedad, etc. Como mtodos podramos tener: ActualizarDatos o
GuardarCambios (donde cambios a las propiedades anteriores se grabaran
fsicamente en una base de datos), ValidarDatos (donde se valida los datos
siempre y cuando haya habido cambios en las propiedades segn una variable
privada Cambios)

Un mdulo de clase:

parecido a los tipos definidos por el usuario UDT.

Cada mdulo define un tipo de objeto.

En ejecucin creas una instancia ( objeto) de la clase.

No tiene interfaz de usuario.

Los mdulos de clase no presentan una interfaz grfica al desarrollados tal y como
lo hacen las formas o formularios. En los formularios puedes colocar visualmente
un botn, una lista, un texto, etc. Los mdulos de clase solo contienen cdigo que
definen las caractersticas del objeto. Si se desea presentar una ventana
informativa (como un Acerca de) u otro formulario, este puede pertenecer a un
proyecto ActiveX DLL y mandarlo llamar mediante un mtodo (como
MostraAcercaDe) que expone alguna clase dentro del proyecto.

Se pueden crear mltiples instancias en ejecucin.


De acuerdo a la configuracin de las propiedades de la clase se pueden crear
varias instancias u objetos de una misma clase. Esto es, la propiedad Instancing
de un mdulo de clase indica cmo se trataran los objetos creados utilizando un
mdulo de clase determinado. Tenemos la opcinde que sea una clase Privada lo
cual significa que no se puede instanciar directamente por otro programa, solo el
proyecto ActiveX DLL o ActiveX Exe que lo contiene una copia u objeto de este
tipo de clase.

Proporciona mtodos y propiedades.

Eventos de un mdulo de clase: Initialize y Terminate

Los mdulos de clase presentan dos eventos:

Initialize: ocurre cuando se crea una instancia de una clase. Se usa,


generalmente para inicializar cualquier dato usado por la instancia de una
clase en el cdigo.

Terminate: ocurre cuando toda referencia a una instancia de una clase son
removidas de memoria al establecer todas las variables que la refieren a un
objeto a Nothing o cuando la ltima referencia al el objeto se encuentra
fuera de alcance. Usado generalmente para limpiar la memoria de objetos
creados dentro de esta instancia y generar un error si hay alguna anomala
o guardar alguna informacin del objeto, etc.

Diferencias con los mdulos estndar

Deben ser creadas explcitamente (crear instancia) antes de usarlas.

No se puede utilizar el mtodo o la propiedad de una clase si no se tiene una


instancia de la misma o una referencia al componente que la contiene si la clase
est configurada como Instancing = PublicNoCreatable.

Puedes crear mltiples instancias de la clase.

Veamos un ejemplo:

1. Inicie VBA y vaya a Men>Insertar>Mdulo de clase.

2. Dele un nombre por ejemplo ObAplicacion

3. Inserte el siguiente cdigo con el que crearemos un objeto Aplicacin:

Public WithEvents MiAplicacion as Application


Si pulsa ahora F2 y despliega la lista de objetos encontrar el objeto recin
creado. A continuacin crearemos dos procedimientos para nuestro objeto recin
creado. El primero se encargar de insertar una nueva hoja en el libro:

Private Sub MiAplicacion_NuevaHoja(ByVal wb As Workbook, ByVal sh As Object)


Dim nombrehoja As String
nombrehoja = InputBox(Introduzca un nombre para la hoja)
ActiveSheet.Name = nombrehoja
ActiveSheet.Move After:=Sheets(Sheets.Count)

End Sub

Con este cdigo crearemos un nuevo libro:

Private Sub MiAplicacion_NuevoLibro(ByVal wb As Workbook)


Dim numhojas, numactual, diferencia As Integer
por cada nuevo libro solicitamos al usuario el nmero de hojas
caso necesario se agregan o eliminan hojas
Do
numhojas = Application.InputBox(Cuntas hojas va a necesitar?, Type:=1)
Loop While numhojas = False
numactual = Sheets.Count
diferencia = numactual numhojas

eliminamos las hojas de sobra y desactivamos alertas


Do While diferencia > 0
Application.DisplayAlerts = False
Sheets.Item(diferencia).Select
ActiveWindow.SelectedSheets.Delete
diferencia = diferencia 1
Loop
Application.EnableEvents = True
Application.DisplayAlerts = True

End Sub

Por ltimo vamos a conectar el mdulo de clase con el objeto Aplicacin:

Option Explicit

Dim app As New ObjAplicacion


Sub Inicializa_MiAplicacion()
Set app.MiAplicacion = Application End Sub

También podría gustarte