Herramientas de usuario

Herramientas del sitio


visual_basic_office:principal

¡Esta es una revisión vieja del documento!


Visual Basic Office

Variables

Para declarar una variable:

Dim miVariable as tipoVariable
Dim miVariable1, miVariable2 As tipoVariable

Las variables en VBA pueden ser de tipo:

  • Boolean: Valores True o False.
  • Byte
  • Char
  • DateTime
  • Decimal
  • Double
  • Integer
  • Long
  • Object
  • Sbyte
  • Short
  • Single
  • String
  • UInteger
  • ULong
  • UShort
  • ValueType

Estructuras de control

Sentencia IF

La sentencia if se declara de la sigiente manera:

If condicionVerdadera1 Then
   ... Código ...
ElseIf condicionVerdadera2 Then
   ... Código ...
ElseIf condicionVerdadera3 Then
   ... Código ...
Else
   ... Código ...
End If

Sentencia Select Case

Evalúa una expresión una vez y ejecuta diferentes conjuntos de instrucciones en función de diferentes valores posibles:

Select Case expresionVerdadera
   Case resultadoA:
      ... Código ...
   case resultadoB To ResultadoN
      ... Código ...
   case resultadoC
      ... Código ...
   case Else
      ... Código ...
End Select

Sentencia de try Catch Finally

Proporciona un medio para controlar una parte o la totalidad de los posibles errores que pueden producirse en un bloque de código determinado, mientras se sigue ejecutando el código.
Puede tener una estructura bastante compleja, puede verse más información en la Página oficial.
Se puede considerar como estructura básica:

Try
   ... Código que puede producir el error ...
 
Catch error As tipoError
   ... Código  ejecutar, por ejemplo, mostrar el error y su tipo ...
 
Finally
   ... Código que se ejecuta haya ocurrido o no un error ...
 
End Try

Bucles

While

Ejecuta una serie de instrucciones siempre y cuando una condición dada sea verdadera:

While condicionVerdadera
    ... Código ...
End While

Se pueden usar las sentencias Continue While para continuar con una iteración más del bucle sin continuar ejecutando el código restante, y Exit While para salir del bucle, aunque no se siga cumpliendo la condición.

Do

Repite un bloque de instrucciones mientras una condición es verdadera con la sentencia While, o hasta que se convierta en verdadera con la sentencia Until.

Do While|Until condicion
    ... Código ...
Loop

Al igual que ocurre con While, se pueden usar las sentencias Continue Do para continuar con una iteración más del bucle sin continuar ejecutando el código restante, y Exit Do para salir del bucle, aunque no se respete la condición.
Puede tener una estructura más compleja, revisar la web oficial

For

Se usa para repetir un conjunto de instrucciones un determinado número de veces. Es posible declarar una variable que lleve la cuenta de las interacciones en el mismo bucle.

For v_indice As tipoDato = valorInicial To valorFinal Step OpcionalPaso
    ... Código ...
Next

También se pueden usar las sentencias Continue For para continuar con una iteración más del bucle sin continuar ejecutando el código restante, y Exit For para salir del bucle, aunque no se respete la condición.

For each

Tipo especial de bucle For, que se usa para repetir un conjunto de instrucciones para cada elemento de una colección o matriz.

For each v_indice As tipoDato In matrizOcoleccion
    ... Código ...
Next

Estructuras de datos

VBA tiene una gran cantidad de estructuras de datos.
Sólo se comentarán las más usadas para trabajar con documentos Excel o Word.

Matrices

Conjunto de valores, denominados elementos, que se agrupan en forma de tabla y están relacionados conceptualmente entre sí.\\Se pueden usar variables individuales para almacenar cada uno de estos elementos de datos.
Con las matrices se puede hacer referencia a estos valores relacionados usando el mismo nombre, así como utilizar un número denominado índice o subíndice para distinguir un elemento individual en función de su posición dentro de la matriz. Los índices de una matriz van de 0 a uno menos que el número total de elementos de la matriz.
Para trabajar con matrices:

' Diferentes formas de declarar matrices
Dim nombreMatriz (n) As tipoElementos   ' Esta matriz tiene una única fila de n elementos
 
Dim nombreMatriz (numFilas, numColumnas) As tipoElementos
 
Dim nombreMatriz = New tipoElementos(,) {{e1, e2, e3}, {e4, e5, e6}, {e7, e8, e9}}    ' Se utiliza (,) cuando no se desea indicar el tamaño de la misma
 
nombreMatriz (n) = valor   ' Se asigna el valor al elemento n de la matriz

Las matrices puede ser declaradas, redimensionadas, accedidas o cambiadas de muchas formas. Más información de matrices en la página oficial.

Colecciones

Representa grupo de objetos similar a una matriz, pero en este caso pueden aumentar y reducirse de manera dinámica a medida que cambian las necesidades de la aplicación. Para algunas colecciones, de puede asignar una clave a cualquier objeto para recuperar rápidamente el objeto con la clave.

En VBA se le denomina colecciones a diferentes estructuras de datos similares (colecciones, listas, diccionarios). Nosotros en este caso, nos referimos siempre al tipo “colecciones”.

Las colecciones son un conjunto ordenado de elementos, accesibles mediante un índice numérico o una clave String. Puede agregar elementos especificando o sin especificar clave. Si agrega un elemento sin clave, debe usar su índice numérico para tener acceso a dicho elemento. El primer elemento de una colección tiene un índice de 1.

Las Colecciones son objetos, y por lo tanto hay que declararlas como tal:

Dim nombreColeccion As New Collection

Para añadir elementos a la colección, acceder a ellos o recuperarlos:

nombreColeccion.Add valorNuevo          ' Añadimos un nuevo valor
nombreColeccion.Add valorNuevo, clave   ' Añadimos un nuevo par valor  - clave
miVariable = nombreColeccion(indice)    ' Recuperamos un valor de la colección especificando un índice
miVariable = nombreColeccion("clave")   ' Recuperamos un valor de la colección especificando la clave

Más información de Colecciones (generales) en la página oficial, y aquí para la clase Collection.

Diccionarios

Son colecciones del tipo Dictionary, muy similares a las colecciones, ya que se representa una colección de pares valor - clave.
Recuperar un valor usando su clave es muy rápido porque la clase Dictionary se implementa como una tabla hash.
Para trabajar con diccionarios, se procede exactamente igual que con las colecciones, pero cambiando el literal Collection por Dictionary o Scripting.Dictionary cuando son creados.

Más información en la página oficial.

Excel

Cheat Sheet

Conceptos generales

Para trabajar con Excel, debemos tener presente que entodo momento debemos saber con qué Celda o conjunto de celdas estamos trabajando, qué celda está activa (seleccionada) y qué hoja está activa (seleccionada).

Variables

En Excel las variables se declaran como se vio en un principio. Los tipos de datos más usados son:

  • Boolean
  • Integer
  • Long
  • Double
  • DateTime
  • String
  • Variant: Si no especifica un tipo de datos al declarar una variable o no declara una variable en absoluto, Visual Basic especifica automáticamente el tipo de datos variant para esta variable.

Word

Macros en Word

Para manejar datos de un documento Word, primero debemos crear una instancia del documento.

Dim doc As Document
Set doc = ActiveDocument

Sentencias útiles

Extraer el número total de páginas de un documento

Dim doc As Document
Dim totalPaginas As Integer
 
Set doc = ActiveDocument
totalPaginas = doc.ComputeStatistics(wdStatisticPages)

Guardar un documento o parte de él en PDF

Dim doc As Document
Dim nombreArchivo As String
Dim ruta As String
Dim totalPaginas As Integer
 
Set doc = ActiveDocument
 
nombreArchivo = "mi_documento.pdf"
ruta = "C:\OneDrive\Documentos\"
totalPaginas = doc.ComputeStatistics(wdStatisticPages)
 
' En este caso se guardarán todas las páginas
doc.ExportAsFixedFormat OutputFilename:=ruta & nombreArchivo, ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=1, To:=totalPaginas, Item:=wdExportDocumentContent

Manejo de errores

En ocasiones es necesario evitar que se detenga la ejecución del programa si se detecta un error.
Para ello usamos la sentencia

 On Error Resume Next

De modo que si se produce un error a continuación,la ejecución del programa continúa, y podremos manejar este error con la sentencia:

 If Err.Number <> 0 Then ' Si es 0 es que no se ha producido error. También podría ponerse "= 'nº error' "
        Set ExcelApp = CreateObject("Excel.Application")
    End If

Para restablecer el manejo normal de errores, se utiliza la sentencia:

 On Error GoTo 0

En el siguiente apartado se puede ver un ejemplo práctico al instanciar en Word elementos Excel.

Trabajar con Excel desde Word

Para trabajar con un Documento Excel desde Word, primero hay que fijar las instancias de los objetos de Excel con la que se va a trabajar.
Si no está abierto Excel, se producirá un error. En el siguiente código evitamos que se detenga la ejecución del programa por este motivo, de modo que si éste ocurre, se cree una nueva instancia. Se volverá a retomar el manejo normal de errores a partir de la sentencia “On Error GoTo 0”

Function LeerValorCeldaExcel(ByVal RutaArchivo As String, ByVal NombreHoja As String, ByVal Fila As Integer) As Variant
    Dim ExcelApp As Object
    Dim ExcelLibro As Object
    Dim ExcelHoja As Object
    Dim ValorCelda As Variant
 
    On Error Resume Next
    ' Crea una instancia de Excel
    Set ExcelApp = GetObject(, "Excel.Application")
 
    ' Si Excel no está abierto, crea una nueva instancia de Excel
    If Err.Number <> 0 Then
        Set ExcelApp = CreateObject("Excel.Application")
    End If
 
    On Error GoTo 0
    ' Abre el archivo de Excel
    Set ExcelLibro = ExcelApp.Workbooks.Open(RutaArchivo)
 
    ' Selecciona la hoja especificada
    Set ExcelHoja = ExcelLibro.Worksheets(NombreHoja)
 
    ' Lee el valor de la celda en la primera columna y la fila especificada
    ValorCelda = ExcelHoja.Cells(Fila, 1).Value
    ' En este caso se lee el valor de una Celda que se va a devolver, pero el programa puede hacer cualquier otra cosa
 
    ' Cierra el archivo de Excel sin guardar cambios
    ExcelLibro.Close False
 
    ' Libera los objetos de Excel
    Set ExcelHoja = Nothing
    Set ExcelLibro = Nothing
    ExcelApp.Quit
    Set ExcelApp = Nothing
 
    ' Devuelve el valor de la celda
    LeerValorCeldaExcel = ValorCelda
End Function

Hay que tener en cuenta que hay que cerrar las instancias abiertas para prevenir problemas de memoria.

visual_basic_office/principal.1684335976.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki