domingo, 30 de octubre de 2011

Instrucciones usadas con los Objetos.

La instrucción With:

Ejecuta una serie de instrucciones sobre un mismo objeto, ofrece varias ventajas, la primera es que ganas tiempo en escritura y la segunda que mejora la legibilidad del código.

With ActiveSheet
    .Name = “Presupuesto”
    .Range (“A1”) = "Presupuesto año 2011"
End With

La instrucción For Each…Next:

Las instrucciones For Each...Next repiten un bloque de instrucciones para cada uno de los objetos de una colección.

Queremos borrar todo el contenido de cada hoja antes de cerrar un libro.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Hoja As Worksheet
    For Each Hoja In ThisWorkbook.Sheets
        Hoja.Cells.Clear
    Next Hoja
End Sub

Se puede salir de un bucle For Each...Next mediante la instrucción Exit For antes de que finalice.

Sub BuscaNumeros()
    For Each miObjeto In MiColeccion
        If IsNumeric(miObjeto.Value) = False Then
            MsgBox "El objeto contiene un valor no numérico."
            Exit For
        End If
    Next c
End Sub

La instrucción If TypeOf:

La instrucción If TypeOf permite comprobar el tipo de objeto.

Sub ControlProcessor(MiControl As Control)
    If TypeOf MiControl Is CommandButton Then
        Debug.Print "Ha pasado un " & TypeName(MiControl)
    ElseIf TypeOf MiControl Is CheckBox Then
        Debug.Print "Ha pasado un " & TypeName(MiControl)
    ElseIf TypeOf MiControl Is TextBox Then
        Debug.Print "Ha pasado un " & TypeName(MiControl)
    End If
End Sub

La instrucción Set:

La instrucción Set nos permite atribuir la referencia de un objeto a una variable, llamada variable objeto.

Sub ModificarHoja()
Dim Libro As Workbook
Dim Hoja As Worksheet
 
Set Libro = Application.Workbooks![Presupuesto.xls]
Set Hoja = Libro.Worksheets![Presupuesto2011]
    With Hoja
        .Name = "Ventas 2011"
        .Range("A2") = "Ventas del año 2011"
    End With
Set Hoja = Nothing
End Sub
 

Los Objetos en Excel.

Los objetos se organizan jerárquicamente, ciertos objetos contienen otros objetos que pueden contener otros. Estos objetos se llaman contenedores.

Un conjunto de objetos del mismo tipo constituyen una colección. La posición de un objeto en la colección puede cambiar cada vez que se produzca un cambio en la colección; por lo tanto, la posición de un objeto específico de la colección puede variar.

El siguiente ejemplo activa la hoja de cálculo Hoja1 del libro Presupuesto. El código usa las colecciones Workbooks y Worksheets.


Workbooks.Open Filename:="Presupuesto.xls"

Worksheeks("Hoja1").Activate


Si queremos imprimir la hoja activa...


Sub ImprimirRango()

Workbooks("Presupuesto.Xls").Sheets("Hoja1").PrintOut

End Sub


Cada objeto de Microsoft tiene alguna combinación de propiedades, eventos y métodos que puede utilizar para hacer que su aplicación funcione como deseas. Los objetos de la misma clase heredan sistemáticamente todas las propiedades y eventos de su clase.

EL editor de VBA dispone de una tecnología que ayuda en el empleo de objetos. Cuando escribimos el nombre de un objeto seguido de un punto, se despliega una lista con métodos y propiedades.



En la próxima publicación instrucciones usadas en los objetos…..


sábado, 29 de octubre de 2011

Consejos de escritura del código.

1.- Los comentarios.

Los comentarios nos permiten documentar el código que estamos escribiendo para hacerlo más legible. Las líneas de comentario comienzan por un apóstrofe (') o con la palabra clave Rem. Los comentarios aparecen en pantalla en color verde, aunque este lo podemos cambiar.


2.- Caracteres de continuación.

La combinación de un espacio seguido de un subrayado ( _); se utiliza para poder saltar de línea de código y así no perder la visibilidad en la pantalla, aunque tiene alguna restricción, no la podemos utilizar para continuar una línea de código dentro de una expresión de tipo cadena.


3.- Sangrías.

Las tabulaciones nos permiten una mayor legibilidad del código. Es especial mente recomendado utilizarlo en las estructuras de control y decisión.


4.- Los nombres de procedimientos, variables y constantes.

Los nombres de procedimientos, variables y constantes deben de respetar las siguientes reglas:

  • El primer carácter debe de ser una letra.
  • No se diferencia mayúscula de minúsculas.
  • No se usan nombres reservados en VB.
  • Un nombre no puede tener más de 255 caracteres.
  • Los procedimientos Function, no se usan nombres iguales a referencias de celdas.
  • No se usan el punto, el espacio, ni los signos ¡!, $, # y @


Una vez comprendido el funcionamiento básico de la programación en VB para la siguiente publicación empezaremos con el uso de objetos y colecciones ……


Operadores.

Los operadores permiten realizar operaciones aritméticas con variables y/o constantes, comparar variables entre ellas, evaluar varias condiciones, etc….

Tenemos varios tipos de operadores:

  • Aritméticos.
  • Comparativos.
  • Lógicos.
  • Unión.

1.- Operadores aritméticos.

Permiten efectuar cálculos aritméticos con variables y constantes.

Operador

Acción

-

Resta

+

Suma

*

Multiplicación

/

División

\

División con resultado entero

Mod

Resto de división entre dos números

Λ

Potencia

2.- Operadores de comparación.

Comparan dos valores o dos cadenas de caracteres.

Operador

Acción

<

Menor que

<=

Menor o igual que

>

Mayor que

>=

Mayor o igual que

=

igual a

<>

Distinto de

Option Compare (Instrucción)

Se usa en el nivel de módulo para declarar el modo de comparación predeterminado que se usa cuando se comparan datos de tipo cadena.

3.- Operadores lógicos.

Permiten evaluar simultáneamente dos o más valores booleanos o expresiones que devuelven este tipo de valor. Generalmente se usan con la instrucción If.

Operador

Acción

AND

Si todas las expresiones tiene el valor true, el resultado es true, Si una tiene el valor false, el resultado es false

OR

Si por lo menos una de las expresiones tiene el valor true, el resultado es true

XOR

Si una y solo una de las expresiones tiene el valor true, el resultado es true

NOT

Devuelve el contrario de la expresión

Eqv

Devuelve true si las dos expresiones son idénticas.

4.- Operadores de concatenación.

El operador de concatenación o unión es el signo &. Engancha cadenas de caracteres, valores y expresiones.


jueves, 27 de octubre de 2011

Estructuras de Bucle o Ciclo

Los bucles significan repeticiones de un bloque de sentencias. Algunos bucles se repiten un número concreto de veces, mientras que otros continúan en ejecución hasta que cumplen una condición determinada. El VBA ofrece tres tipos de estructura de bucle:

  • La sentencia Do … Loop.
  • La sentencia While …. Wend.
  • La sentencia For …. Next / For Each…. Next

Do … Loop y While …. Wend repiten las operaciones en función de una condición, mientras que For …. Next repite las operaciones una cantidad de veces por contador.

For Each…. Next permite recorrer los elementos de una coleccion.

El siguiente ejemplo repite la sentencia MsgBox y muestra el valor hasta que alcanza el valor 10.

Sub Do_pruebas()

Dim Valor As Integer

Valor = 1

Do Until Valor = 10

MsgBox Valor

Valor = Valor + 1

Loop

End Sub

Advertencia: Incremente el valor o reduzca siempre la variable dentro del bucle, si lo olvida, el bucle se ejecutara sin fin.

Este ejemplo establece 10 repeticiones, con incremento negativo de 2 en la hoja Excel activa.

Sub for_pruebas()

Dim X As Integer

For X = 10 To 1 Step -2

Cells(X,1) = X

Next X

End Sub

Por lo general la instrucción For Each.. Next suele utilizarse para evaluar rangos y u hojas, como se ve en el siguiente ejemplo:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim Hoja As Worksheet

For Each Hoja In ThisWorkbook.Sheets

Hoja.PageSetup.LeftFooter = "Jose Luis"

Next Hoja

End Sub

Con este ejemplo colocamos en el encabezado de cada hoja mi nombre.

miércoles, 26 de octubre de 2011

Estructuras de Decisión

En lenguaje de VBA incorpora estructuras de decisión que permiten controlar el flujo de ejecución de un programa.

Si no existen tales estructuras en su código, éste se ejecutará de izquierda a derecha y de arriba a abajo según lo haya escrito.

Sin embargo, en muchas ocasiones deseamos ejecutar una línea u otra dependiendo de cierta condición. En estos casos la introducción de las estructuras de control modifica el flujo normal de la ejecución.

La instrucción If-Then-Else es la estructura clásica de decisión y presenta la siguiente sintaxis:

If condición1 Then

[instrucciones1]

[ElseIf condición2 Then

[instrucciones2]]

[Else

[instruccionesN]]

End If

Cuando el programa llega a la instrucción If Condición Then , se evalúa la condición, si esta se cumple (es cierta), se ejecutan todas las sentencias que están encerradas en el bloque, si no se cumple la condición, se saltan estas sentencias.

Veamos un ejemplo:

If IsEmpty(Cells(1, 1)) Then Beep: MsgBox "Olvido el titulo"

Cuando existe un gran número de condiciones evaluar, es posible que la instrucción If-Then-Else se complique de gran manera. En estos casos Visual Basic permite el uso de otra estructura de decisión: la instrucción Select Case.

Select Case Variable_A_Verificar

Case "Opcion1"

Case "Opcion2"

Case Else "Si no se cumple cualquier Opción

End Select


Para la siguiente publicación tocaremos las estructuras de ciclo….


Variables Objeto

Una variable objeto representa un objeto Excel, como puede ser un grupo de resultados, un libro, hoja, etc.

Las variables objeto se declaran de la misma forma que cualquier otra variable.

Ejemplo:

Dim Test As Object

El tipo Object se declara cuando el tipo de objeto no se conoce.

Dim Nombre As Worksheet

Dim Imprimir As Chart

Para asignarle a una variable un objeto, usamos la instrucción Set

Dim Zona As Range

Set Zona = Range("A1:B10")

La sentencia Set tiene relacionada la palabra clave Nothing.

Nothing rompe la conexión entre la variable y el objeto y cualquier objeto específico, por ejemplo cuando hemos terminado de utilizar el rango asignado utilizamos Nothing para eliminarlo:

Set Zona = Nothing

Para la siguiente publicación tocaremos las estructuras de decisión….

domingo, 23 de octubre de 2011

Variables

Antes de seguir avanzado vamos a explicar que son las variables, una variable es simplemente un trozo de memoria que la función o procedimiento se reserva para guardar datos.

Normalmente las variables las declaramos con la instrucción DIM de la siguiente forma:

Dim saludo As String

Las variables se identifican por nombre que permite hacer referencia al valor que contiene y un tipo que determina la naturaleza de los datos que pueden almacenar, el tipo de variable se especifica en la declaración, tras la palabra AS

En nuestro ejemplo, declararemos la variable “saludo” de tipo String (tipo texto).

Tipos de variables:

Tipo de datos

Tamaño

Intervalo

Byte

byte

0 a 255

Boolean

bytes

True o False

Integer

bytes

-32,768 a 32,767

Long (entero largo)

bytes

-2,147,483,648 a 2,147,483,647

Single (coma flotante/ precisión simple)

bytes

-3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos

Double (coma flotante/ precisión doble)

bytes

-1.79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos

Currency (entero a escala)

bytes

-922.337.203.685.477,5808 a 922.337.203.685.477,5807

Decimal

bytes

+/-79.228.162.514.264.337.593.543.950.335 sin punto decimal; +/-7,9228162514264337593543950335 con 28 posiciones a la derecha del signo decimal; el número más pequeño distinto de cero es +/-0,0000000000000000000000000001

Date

bytes

1 de enero de 100 a 31 de diciembre de 9999

Object

bytes

Referencia a tipo Object

String (longitud variable)

bytes + longitud de la cadena

0 a 2.000 millones

String (longitud fija)

longitud de la cadena

1 a 65.400 aproximadamente

Variant (con números)

bytes

valor numérico hasta el intervalo de un tipo Double

Variant (con caracteres)

bytes + longitud de la cadena

mismo intervalo que para un tipo String de longitud variable

Definido por el usuario (utilizando Type)

número requerido por los elementos

intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.

¿Qué significa la instrucción Option Explicit?

Se usa en el nivel de módulo para forzar declaraciones explícitas de todas las variables en dicho módulo, debe aparecer en un módulo antes de cualquier procedimiento.

Cuando Option Explicit aparece en un módulo, debemos declarar explícitamente todas las variables mediante las instrucciones Dim, Private, Public, ReDim o Static.

De hecho si intentamos usar un nombre de variable no declarado, ocurrirá un error en tiempo de compilación o bien en el momento en el que el código de origen se traduce a código de ejecución.

Cuando no usamos la instrucción Option Explicit todas las variables no declaradas son Variant (pueden tomar cualquier valor) a menos que el tipo predeterminado esté especificado de otra manera con una instrucción Deftipo (es decir salvo que luego vayamos definiendo la variables).

La declaración Option Explicit se utiliza para evitar escribir incorrectamente el nombre de una variable existente o para evitar confusiones en el código, donde el alcance de la variable no está claro.