sábado, 5 de noviembre de 2011

Enfrentarse a los errores

Pueden aparecer los siguientes tipos de errores al escribir y ejecutar procedimientos VBA:

Sintaxis y errores gramaticales:
Estos son los errores más fáciles de corregir, porque el editor ayuda a encontrarlos, si no son corregidos estos provocan un error de compilación, de  ahí el mensaje que aparece.



Errores en tiempo de ejecución:
Estos errores no pueden ser detectados hasta que no se ejecuta el procedimiento en su entorno final.

Errores lógicos:
Estos errores simplemente dan una respuesta equivocada, el procedimiento hace justo lo que le hemos dicho que haga, pero el resultado no es el esperado.

Administración de errores
Hay errores que pueden hacer que VBA se comporte de forma imprevisible.
Para evitar esto, es posible manejar el error con ayuda de las siguientes instrucciones y funciones:

On Error: Indican una secuencia de instrucciones que se ejecutan en caso de error.

Sub GOTOMacro()
Dim X, Y
On Error GoTo CasoError
    Y = [A1] / [B1]
    ' Si diera error, saltaría a la línea 'CasoError'
        For X = 1 To 50
        Cells(X, 1) = X
    Next X
Exit Sub
CasoError:
    MsgBox "Ha surgido un error, intente con otros valores en A1 y B1"
End Sub

Resumen: La instrucción Resumen nos permite seguir con la ejecución del código cuando termina la rutina de administración del error.

Hay tres sintaxis diferentes:
  • Resumen O: reanuda la ejecución del código donde se produjo el error.
  • Resumen Next: reanuda a partir de la instrucción siguiente.
  • Resumen Linea: reanuda en una línea específica.

Sub Macro ()
' Si hay un error lo ignora y continúa ejecutando el resto del código
On Error Resume Next
' Aquí iría el resto del código
End Sub



El Objeto Range.

EL objeto Range representa un rango de celdas y pude estar constituido por:
  • Una celda.
  • Una fila.
  • Una Columna.
  • Un rango de celdas contiguas o no.
  • Un rango 3D.


Esto nos puede dar una idea de que nos encontramos frente al objeto más importante de Excel.

Los siguientes métodos y propiedades devuelven un objeto Range:
  • Propiedad Range
  • Propiedad Cells
  • Range y Cells
  • Propiedad Offset (representa un rango desplazado con respecto al rango especificado)
  • Método Union (Devuelve la unión de dos o más rangos)


El ejemplo siguiente modifica el contenido y el color de celdas.

Sub llenado()
Dim celda As Range
Application.Cells(1, 2) = "Enero"
Application.Range("A1:G10").Cells(2, 2) = "Febrero"
Application.Cells(3, 2) = "Marzo"
    For Each celda In Range("C1:D3")
        celda.Interior.Color = vbRed
    Next celda
End Sub

No profundizaremos más ya que este objeto nos lo iremos encontrando en cada uno de los ejemplos que desarrollaremos.

martes, 1 de noviembre de 2011

El Objeto Workbooks

El objeto Workbook representa un libro Microsoft Excel. La colección Workbooks contiene todos los Workbook objetos abiertos en Microsoft Excel.

Ejemplos de métodos:

Use el método Open para abrir un archivo. Así se crea un libro nuevo para el archivo abierto. En el siguiente ejemplo se abre el archivo Prueba.xls como un libro de sólo lectura.

Workbooks.Open FileName:="Prueba.xls", ReadOnly:=True

Use el método Add para crear un nuevo libro vacío y agregarlo a la colección. En el siguiente ejemplo se agrega un libro nuevo vacío a Microsoft Excel.

Workbooks.Add

Use el método Close para cerrar el  libro. En el siguiente ejemplo se cierran todos los libros abiertos.

Workbooks.Close

Ejemplos de Propiedades:

Use la propiedad Name para que nos devuelva el nombre del libro.

Workbooks.Name

Use la propiedad Path para que nos devuelva la ruta de acceso al archivo del libro.

Workbooks.Path

Use la propiedad Author para que nos devuelva el autor del libro.

Workbooks.Author

Probemos ahora a exportar un libro Excel a formato pdf.

Sub pdf()
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:="Prueba", includedocproperties:=True, openafterpublish:=True
End Sub

EL Objeto Application

El objeto Application representa la aplicación de Microsoft Excel activa. Es el objeto por defecto y, por lo tanto, es generalmente opcional.

Las principales opciones de Excel  pueden ser definidas a partir de propiedades del objeto Application la mayoría de estas propiedades son de lectura.

Application es el objeto superior, así el primer ejemplo, siguiendo toda la jerarquía de objetos quedaría de la siguiente forma:

Sub Hola ()
Application.WorkBooks(1).WorkSheets(1).Range("A1").Value = "Hola"
End Sub

Las propiedades del objeto Application se divide en cuatro grupos:
  • Propiedades que controlan el estado
  • Propiedades que controlan la presentación
  • Propiedades que devuelven objetos
  • Propiedades que controlan la manipulación de los archivos

Las propiedades que controlan el estado definen el ambiente donde se ejecuta el Excel.

Toquemos un poquito el interfaz

Sub Interfaz()
With Application
.Caption = "Aplicación " & .Name _
& " Versión: " & .Version
.StatusBar = "VB para Aplicaciones (Excel)"
.WindowState = xlMaximized
.StandardFont = "Verdana"
.StandardFontSize = 12
End With
End Sub

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 ……