Computing">
Nothing Special   »   [go: up one dir, main page]

0 - Conceptos de VBA

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

Guía Rápida Módulos de Clase en Excel

VBA.

Los módulos de clase llegaron para quedarse en VBA, haciendo a Excel una herramienta mas
optimizada para la programación basada en objetos. En esta Guia Rápida hablaremos de
como se pueden utilizar para mejorar tus líneas de código.

1. Que es un módulo de clase.

Los módulos de clase técnicamente son objetos que se pueden crear dentro del ambiente de
programación como objetos vacíos, mismos que les podemos asignar cualquier propiedad
existente (o no) para generar procesos complejos o almacenar información para después.

2. Declaración y propiedades.

La ventana se ve igual a todos los demás blogs de desarrollo, pero aceptara un tipo de código
especifico que nos dejara desarrollar los objetos nuevos. Dentro de las propiedades (lado
izquierdo inferior seleccionando el módulo de clase veremos que contiene dos propiedades:
Nombre e Instansing. Esta será la forma en la que se muestra el código. Por default, los
módulos de clase son privados, por lo que si quieres utilizarlos dentro de otras líneas de
código puedes cambiarlos a “PublicNotCreateble”.

3. La propiedad Let

Dentro de la ventana de desarrollador escribamos primero una variable tipo Private que nos
servirá para traer valores desde otros módulos.

Private dbl as Double

Ahora, iniciemos este objeto con la propiedad Let, la cual nos dejara obtener un valor para
nuestra clase.

Public Property Let Valor(numero as Double)

dbl = numero
End Property
La propiedad Let siempre debe tener al menos una variable dentro del paréntesis para
poder funcionar, en este caso llamaremos a la variable número para asignar un valor del tipo
número decimal. Usando la variable dbl asignada arriba, lograremos traer un nuevo numero
de un módulo externo.

4. La propiedad Get

A diferencia de Let, Get nos permitirá seleccionar el valor asignado a nuestro objeto y
devolverlo dentro de cualquier otra instancia.

Public Property Get Valor() as Double

valor = dbl

End Property
Al hacer una declaración de este tipo, podremos obtener el valor de dbl que asignamos dentro
del Let, con lo cual el objeto ya tiene una característica (un numero decimal).

5. El llamado desde un módulo normal.

Continuemos ahora en un módulo normal en VBA para inicializar nuestro objeto. Lo


podemos insertar de la misma forma que el módulo de clase pero ahora seleccionando la
opción Insertar > Módulo.

Una vez dentro, declararemos una variable del tipo público para llamar a nuestra clase.

Public nClase as New Clase1


Necesitamos primero asignar el valor a nuestra clase, por lo que llamaremos a nuestra
variable nClase en un procedimiento.

Sub nClaseIn()

Dim aDbl as Double

aDbl = 8.5

nClase.Valor = aDBL

End Sub
Nota como mediante esto estamos designando un número que servirá como propiedad Valor
dentro de la clase publica nClase, por lo que ahora nuestro objeto tiene un valor de 8.5
almacenado en su memoria.
A diferencia de un método normal, ese objeto valdrá 8.5 hasta que nosotros designemos lo
contrario, por lo que desde otro procedimiento podemos acceder a su valor sin ningún
problema

Sub nClaseOut()

MsgBox nClase.Valor

End Sub
Si probamos los procedimientos por separado veremos como el valor de nuestro objeto en el
módulo de clase no cambiara, así corramos mil macros más o hagamos cualquier cosa (menos
volver a designar el valor).

Los códigos completos quedan así:

Para el módulo de clase

Private dbl As Double 'Permite tener un valor al cual acceder


Public Property Let Valor(numero As Double)
' La propiedad Let nos permitira designar un valor a nuestro objeto
' Recuerda que siempre debe contener al menos una variable dentro del parentesis
' Aqui podriamos escribir cualquier tipo de operación que queramos.

dbl = numero
End Property

Public Property Get Valor() As Double


' La propiedad Get nos permite obtener lo que sea que hayamos designado
' dentro del mismo nombre de la propiedad en Let
' En este caso, Let es un numero double y Get debe devolver lo mismo

Valor = dbl
End Property
Para el modulo normal

Public nClase As New Clase1 ' Una nueva instancia del objeto

Sub nClaseIn()
' Inicializaremos nuestra clase declarando una variable a su propiedad
' Let, con lo que esa propiedad obtendra un valor

Dim aDbl As Double


aDbl = 8.5
nClase.Valor = aDbl
End Sub

Sub nClaseOut()
' Con este procedimiento llamaremos por separado al objeto.
' El valor del objeto en su propiedad Valor sera el designado
' al inicializar con el procedimiento de arriba.
MsgBox nClase.Valor
End Sub
Puedes usar los módulos de clase en cualquier procedimiento, evento o incluso en UserForms,
por lo que son una herramienta útil y pueden tener tantas propiedades como uno quiera.

Anotamos otros conceptos como de la variable


¿Qué es una variable?

Las variables se suelen utilizar en muchos ámbitos diferentes, como por ejemplo,
en matemáticas. Pero aquí te encontrarás la definición de variable en
programación.

Una variable es donde se guarda (y se recupera) datos que se utilizan en un


programa.

Cuando escribimos código, las variables se utilizan para:

 Guardar datos y estados.
 Asignar valores de una variable a otra.
 Representar valores dentro de una expresión matemática.
 Mostrar valores por pantalla.

Todas las variables deben ser de un tipo de datos, ya sea un dato de tipo primitivo,
como un número o texto, o un dato abstracto, como un objeto que se ha creado.

Así que básicamente podemos decir que una variable es

Tipo de dato → identificador variable → valor almacenado.

Len: La función LEN devuelve un valor entero que indica la cantidad de caracteres en la


cadena de entrada. Si la cadena de entrada es una cadena de caracteres, la
función LEN devuelve una cantidad real de caracteres en cadenas multibyte y no la
cantidad de bytes.

Que es Cadena de caracteres:


Val: Una variable de solo lectura (read-only) es una variable que no puede ser reasignada.
Para declararlas, usa la palabra reservada Val.
Double: El Double tipo de datos proporciona las magnitudes más grandes y más pequeñas
posibles para un número, respecto de Integer.

Integer: El tipo de datos Integer proporciona un rendimiento óptimo en un procesador de


32 bits. Los demás tipos enteros son más lentos a la hora de cargarse y almacenarse en la
memoria. El valor predeterminado de Integer es 0.

Variant: Una variable de tipo variante, llamada "Variant" en inglés como se denomina


en Visual Basic, necesita 16 bytes de almacenamiento y su distribución es la siguiente. El valor
retornado por VarType; especifica qué tipo de datos contiene la variante. Bytes reservados;
debe ser cero.

La función LCase:
Sintáxis es: LCase ( cadena )

El argumento de cadena requerido es cualquier  expresión de cadena válida . Si la


cadena contiene Null , se devuelve Null .

Observaciones

Solo las letras mayúsculas se convierten en minúsculas; todas las letras minúsculas


y los caracteres que no son letras permanecen sin cambios.

Ejemplo

Este ejemplo usa la función LCase para devolver una versión en minúsculas de una


cadena.

Dim LowerCase, UpperCase


LowerCase = "Hello World 1234" ' String to convert.
UpperCase = UCase(LowerCase) ' Returns "HELLO WORLD 1234".

expresión de cadena

Cualquier expresión que se evalúe como una secuencia de caracteres


contiguos. Los elementos de una expresión de cadena pueden incluir una función
que devuelve una cadena, un literal de cadena, una constante de cadena, una
variable de cadena, una variante de cadena o una función que devuelve una
variante de cadena ( VarType 8 ).
literal de cadena

Cualquier expresión que consta de una secuencia de caracteres contiguos entre


comillas que se interpreta literalmente como los caracteres entre comillas.

Subprocedimiento

Un procedimiento que realiza una tarea específica dentro de un programa, pero no


devuelve ningún valor explícito. Un procedimiento Sub comienza con una
instrucción Sub y termina con una instrucción End Sub .

comprobación de sintaxis

Una característica que verifica su código para la sintaxis correcta. Si la función de


verificación de sintaxis está habilitada, se muestra un mensaje cuando ingresa un
código que contiene un error de sintaxis y se resalta el código sospechoso.

error de sintaxis

Un error que ocurre cuando ingresa una línea de código que Visual Basic no
reconoce.

Tenga en cuenta que las reglas de sintaxis para palabras clave individuales se
definen en la sección Sintaxis del tema de ayuda asociado. Para obtener ayuda
sobre una palabra clave desde el entorno de desarrollo, seleccione la palabra clave
y presione F1.

orden de tabulación

El orden en que el foco se mueve de un campo al siguiente al presionar TAB o


SHIFT+TAB.

Expresión de tiempo

Cualquier expresión que pueda interpretarse como una hora. Esto incluye cualquier
combinación de literales de tiempo, números que parecen horas, cadenas que
parecen horas y horas devueltas por funciones.

Los tiempos se almacenan como parte de un número real. Los valores a la derecha


del decimal representan el tiempo. Por ejemplo, el mediodía (12:00 p. m.) se
representa con 0,5.
golpe

Una unidad de medida de pantalla igual a 1/20 punto. Un twip es una unidad
independiente de la pantalla que se utiliza para garantizar que la ubicación y la
proporción de los elementos de la pantalla en su aplicación de pantalla sean las
mismas en todos los sistemas de visualización. Hay aproximadamente 1440 twips
por pulgada lógica o 567 twips por centímetro lógico (la longitud de un elemento
de pantalla que mide una pulgada o un centímetro cuando se imprime).

carácter de declaración de tipo

Un carácter adjunto al nombre de una variable que indica el tipo de datos de la


variable. De forma predeterminada, las variables son de tipo Variant a menos que
esté presente una declaración de tipo  Def correspondiente en el módulo.

biblioteca de tipos

Un archivo o componente dentro de otro archivo que contiene descripciones


estándar de objetos, propiedades y métodos expuestos que están disponibles para
la automatización. Los archivos de biblioteca de objetos (.olb) contienen bibliotecas
de tipos.

Unicode

Estándar de caracteres de la Organización Internacional de Normalización


(ISO). Unicode utiliza un esquema de codificación de 16 bits (2 bytes) que permite
65 536 espacios de caracteres distintos. Unicode incluye representaciones para
signos de puntuación, símbolos matemáticos y dingbats, con un espacio sustancial
para futuras expansiones.

formato universal de fecha

El formato de fecha universal es #yyyy-mm-dd hh:mm:ss#. Sin embargo, tanto el


componente de fecha ( #yyyy-mm-dd#) como el componente de hora ( #hh:mm:ss#) se
pueden representar por separado.

tipo definido por el usuario

Cualquier tipo de datos definido mediante la instrucción Type . Los tipos de datos


definidos por el usuario pueden contener uno o más elementos de cualquier tipo
de datos. Las matrices de tipos de datos definidos por el usuario y de otro tipo se
crean mediante la instrucción Dim . Las matrices de cualquier tipo se pueden
incluir dentro de los tipos definidos por el usuario. Ver resumen de tipos de datos .

variable

Una ubicación de almacenamiento con nombre que puede contener datos que se
pueden modificar durante la ejecución del programa. Cada variable tiene un
nombre que la identifica de forma única dentro de su ámbito. Se puede especificar
o no un tipo de datos.

Los nombres de las variables deben comenzar con un carácter alfabético, deben ser
únicos dentro del mismo ámbito, no pueden tener más de 255 caracteres y no
pueden contener un punto incrustado o un carácter de declaración de tipo.

Tipo de datos variante

Un tipo de datos especial que puede contener datos numéricos, de cadena o de


fecha, así como tipos definidos por el usuario y los valores
especiales Empty y Null . El tipo de datos Variant tiene un tamaño de
almacenamiento numérico de 16 bytes y puede contener datos hasta el rango de
un Decimal , o un tamaño de almacenamiento de caracteres de 22 bytes (más la
longitud de la cadena), y puede almacenar cualquier texto de carácter. La
función VarType define cómo se tratan los datos en una variante. Todas las
variables se convierten en tipos de datos Variant si no se declaran explícitamente
como algún otro tipo de datos. Ver resumen de tipos de datos .

expresión variante

Cualquier expresión que pueda evaluar datos numéricos, de cadena o de fecha, así
como los valores especiales Empty y Null .

mira la expresión

Una expresión definida por el usuario que le permite observar el comportamiento


de una variable o expresión. Las expresiones de vigilancia aparecen en la ventana
de vigilancia del editor de Visual Basic y se actualizan automáticamente cuando
ingresa al modo de interrupción. La ventana Watch muestra el valor de una
expresión dentro de un contexto dado. Las expresiones de observación no se
guardan con su código.
orden Z

La superposición visual de controles en un formulario a lo largo del eje z del


formulario (profundidad). El orden z determina qué controles están delante de
otros controles.

Evento Worksheet_Change
El Evento Change ocurre cuando cualquier celda en una hoja es cambiado por el usuario o por
código VBA. El Evento Change NO se activa cuando un cálculo genera un valor diferente en las celdas
o cuando un objeto es añadido a la hoja. Dicho de otro modo, cuando cambiamos el contenido de
cualquier celda en la hoja este Evento se dispara ejecutando el código contenido dentro de él. Si el valor
de una celda cambia por actualización de fórmulas este no se ejecuta. El
Evento Worksheet_Change recibe un argumento llamado Target y que corresponde a un objeto Range
el cual es la celda que cambio o las celdas que cambiaron de contenido. Para nuestro problema solo
queremos que se ejecute cuando una celda en específico cambie, para nuestro caso la celda  E4. Para
poder hacer esto utilizamos el método intersect.

Evento Enter
El evento Enter ocurre antes de que un control reciba realmente el foco de un control en el
mismo formulario o informe. Este evento enter se le puede asignar a un objeto de control,
para el ejemplo, utilizamos el ComboBox:

Private Sub ComboBox1_Enter()

'Este evento agrega en el ComboBox los nuevos registros

Dim Fila As Integer

Dim final As Integer

Dim Lista As String

For Fila = 1 To ComboBox1.ListCount

ComboBox1.RemoveItem 0

Next Fila

For Fila = 2 To 1000

If Hoja2.Cells(Fila, 1) = "" Then


final = Fila - 1

Exit For

End If

Next

For Fila = 2 To final

Lista = Hoja2.Cells(Fila, 1)

ComboBox1.AddItem (Lista)

Next

End Sub
Este código revisa las filas y columnas para agregar a la lista los ítems.

También podría gustarte