Primeros pasos con excel-vba

Abriendo el Editor de Visual Basic (VBE)


Paso 1: Abra un libro de trabajo

ingrese la descripción de la imagen aquí


Paso 2 Opción A: Presione Alt + F11

Este es el acceso directo estándar para abrir el VBE.

Paso 2 Opción B: Pestaña Desarrollador –> Ver código

Primero, la pestaña Desarrollador debe agregarse a la cinta. Vaya a Archivo -> Opciones -> Personalizar cinta, luego marque la casilla para desarrollador.

ingrese la descripción de la imagen aquí

Luego, vaya a la pestaña de desarrollador y haga clic en “Ver código” o “Visual Basic”

ingrese la descripción de la imagen aquí

Paso 2 Opción C: pestaña Ver > Macros > Haga clic en el botón Editar para abrir una macro existente

Estas tres opciones abrirán el Editor de Visual Basic (VBE):

ingrese la descripción de la imagen aquí

Declaración de variables

Para declarar explícitamente las variables en VBA, utilice la instrucción Dim, seguida del nombre y el tipo de la variable. Si se utiliza una variable sin declarar, o si no se especifica ningún tipo, se le asignará el tipo Variant.

Use la instrucción Option Explicit en la primera línea de un módulo para forzar que todas las variables se declaren antes de su uso (consulte https://www.wikiod.com/es/excel-vba/practicas-recomendadas-de-vba#Utilice SIEMPRE “Opción explícita” use-option-explicit#t=201607231503377559602 ).

Se recomienda encarecidamente utilizar siempre Option Explicit porque ayuda a evitar errores tipográficos/ortográficos y garantiza que las variables/objetos se mantendrán en el tipo previsto.

Option Explicit

Sub Example()
    Dim a As Integer
    a = 2
    Debug.Print a
    'Outputs: 2

    Dim b As Long
    b = a + 2
    Debug.Print b
    'Outputs: 4

    Dim c As String
    c = "Hello, world!"
    Debug.Print c
    'Outputs: Hello, world!
End Sub

Se pueden declarar múltiples variables en una sola línea usando comas como delimitadores, pero cada tipo debe declararse individualmente, o se establecerán de forma predeterminada en el tipo Variante.

Dim Str As String, IntOne, IntTwo As Integer, Lng As Long
Debug.Print TypeName(Str)    'Output: String
Debug.Print TypeName(IntOne) 'Output: Variant <--- !!!
Debug.Print TypeName(IntTwo) 'Output: Integer
Debug.Print TypeName(Lng)    'Output: Long

Las variables también se pueden declarar utilizando sufijos de carácter de tipo de datos ($ % & ! # @), sin embargo, se desaconseja cada vez más su uso.

 Dim this$  'String
 Dim this%  'Integer
 Dim this&  'Long
 Dim this!  'Single
 Dim this#  'Double
 Dim [email protected]  'Currency

Otras formas de declarar variables son:

  • Static como: Static CounterVariable as Integer

Cuando usa la instrucción Static en lugar de una instrucción Dim, la variable declarada conservará su valor entre llamadas.

  • Public como: Public CounterVariable as Integer

Las variables públicas se pueden utilizar en cualquier procedimiento del proyecto. Si una variable pública se declara en un módulo estándar o un módulo de clase, también se puede usar en cualquier proyecto que haga referencia al proyecto donde se declara la variable pública.

  • Private como: Private CounterVariable as Integer

Las variables privadas solo pueden ser utilizadas por procedimientos en el mismo módulo.

Fuente y más información:

Variables de declaración de MSDN

Caracteres de tipo (Visual Basic)

Adición de una nueva referencia de biblioteca de objetos

El procedimiento describe cómo agregar una referencia de biblioteca de objetos y luego cómo declarar nuevas variables con referencia a los nuevos objetos de clase de biblioteca.

El siguiente ejemplo muestra cómo agregar la biblioteca PowerPoint al Proyecto VB existente. Como puede verse, actualmente la biblioteca de objetos de PowerPoint no está disponible.

ingrese la descripción de la imagen aquí

Paso 1: Seleccione Menú Herramientas –> Referencias… ingrese la descripción de la imagen aquí

Paso 2: Seleccione la Referencia que desea agregar. En este ejemplo, nos desplazamos hacia abajo para encontrar “Microsoft PowerPoint 14.0 Object Library”, y luego presionamos “OK”. ingrese la descripción de la imagen aquí

Nota: PowerPoint 14.0 significa que la versión de Office 2010 está instalada en la PC.

Paso 3: en el Editor de VB, una vez que presionas Ctrl+Espacio juntos, obtienes la opción de autocompletar de PowerPoint. ingrese la descripción de la imagen aquí

Después de seleccionar PowerPoint y presionar ., aparece otro menú con todas las opciones de objetos relacionadas con la Biblioteca de objetos de PowerPoint. Este ejemplo muestra cómo seleccionar el objeto Aplicación de PowerPoint. ingrese la descripción de la imagen aquí

Paso 4: Ahora el usuario puede declarar más variables utilizando la biblioteca de objetos de PowerPoint.

Declare una variable que haga referencia al objeto “Presentación” de la biblioteca de objetos de PowerPoint. ingrese la descripción de la imagen aquí

Declare otra variable que haga referencia al objeto Slide de la biblioteca de objetos de PowerPoint. ingrese la descripción de la imagen aquí

Ahora la sección de declaración de variables se ve como en la captura de pantalla a continuación, y el usuario puede comenzar a usar estas variables en su código. ingrese la descripción de la imagen aquí

Versión de código de este tutorial:

Option Explicit

Sub Export_toPPT()

Dim ppApp As PowerPoint.Application
Dim ppPres As PowerPoint.Presentation
Dim ppSlide As PowerPoint.Slide

' here write down everything you want to do with the PowerPoint Class and objects


End Sub

Hola Mundo

  1. Abra el Editor de Visual Basic (consulte https://www.wikiod.com/es/excel-vba/primeros-pasos-con-excel-vba#Abrir el Editor de Visual Basic (VBE))
  2. Haga clic en Insertar –> Módulo para agregar un nuevo módulo:

ingrese la descripción de la imagen aquí

  1. Copie y pegue el siguiente código en el nuevo módulo:

    Sub hello() MsgBox “Hello World !” End Sub

Para obtener :

ingrese la descripción de la imagen aquí

  1. Haga clic en la flecha verde “reproducir” (o presione F5) en la barra de herramientas de Visual Basic para ejecutar el programa: ingrese la descripción de la imagen aquí

  2. Seleccione el nuevo sub “hola” creado y haga clic en Ejecutar: ingrese la descripción de la imagen aquí

  3. Listo, debería ver la siguiente ventana:

ingrese la descripción de la imagen aquí

Primeros pasos con el modelo de objetos de Excel

Este ejemplo pretende ser una introducción suave al modelo de objetos de Excel para principiantes.


  1. Abra el Editor de Visual Basic (VBE)
  2. Haga clic en Ver –> Ventana inmediata para abrir la Ventana inmediata (o ctrl + G):

ingrese la descripción de la imagen aquí

  1. Debería ver la siguiente ventana inmediata en la parte inferior de VBE:

ingrese la descripción de la imagen aquí

Esta ventana le permite probar directamente algún código VBA. Entonces, comencemos, escriba en esta consola:

?Worksheets. 

VBE tiene intellisense y luego debería abrir una información sobre herramientas como en la siguiente figura:

ingrese la descripción de la imagen aquí

Seleccione .Count en la lista o escriba directamente .Cout para obtener:

?Worksheets.Count
  1. Luego presione Entrar. La expresión se evalúa y debería devolver 1. Esto indica el número de Hoja de trabajo presente actualmente en el libro de trabajo. El signo de interrogación (?) es un alias para Debug.Print.

Worksheets es un Objeto y Count es un Método. Excel tiene varios objetos (Libro de trabajo, Hoja de trabajo, Rango, Gráfico ..) y cada uno de ellos contiene métodos y propiedades específicos. Puede encontrar la lista completa de objetos en la referencia de Excel VBA. El objeto Hojas de trabajo se presenta aquí .

Esta referencia de Excel VBA debería convertirse en su principal fuente de información sobre el modelo de objetos de Excel.

  1. Ahora intentemos con otra expresión, escriba (sin el carácter ?):

    Worksheets.Add().Name = “StackOveflow”

  2. Presione Entrar. Esto debería crear una nueva hoja de trabajo llamada StackOverflow.:

ingrese la descripción de la imagen aquí

Para comprender esta expresión, debe leer la función Agregar en la referencia de Excel mencionada anteriormente. Encontrarás lo siguiente:

Add:  Creates a new worksheet, chart, or macro sheet. 
The new worksheet becomes the active sheet. 
Return Value: An Object value that represents the new worksheet, chart,
 or macro sheet.

Entonces Worksheets.Add() crea una nueva hoja de trabajo y la devuelve. La hoja de trabajo (sin s) es en sí misma un Objeto que se puede encontrar en la documentación y Nombre es una de sus propiedades (ver aquí). Se define como:

Worksheet.Name Property:  Returns or sets a String value that 
 represents the object name.

Entonces, al investigar las diferentes definiciones de objetos, podemos entender este código Worksheets.Add().Name = "StackOveflow".

Add() crea y agrega una nueva hoja de trabajo y le devuelve una referencia, luego establecemos su Nombre propiedad en “StackOverflow”


Ahora seamos más formales, Excel contiene varios Objetos. Estos Objetos pueden estar compuestos por una o varias colecciones de objetos de Excel de la misma clase. Es el caso de WorkSheets, que es una colección de objetos Worksheet. Cada objeto tiene algunas propiedades y métodos con los que el programador puede interactuar.

El modelo de objetos de Excel se refiere a la jerarquía de objetos de Excel

En la parte superior de todos los objetos se encuentra el objeto “Aplicación”, que representa la instancia de Excel en sí. La programación en VBA requiere una buena comprensión de esta jerarquía porque siempre necesitamos una referencia a un objeto para poder llamar a un método o establecer/obtener una propiedad.

El modelo de objetos de Excel (muy simplificado) se puede representar como,

                            Application
                             Workbooks
                             Workbook
                            Worksheets
                             Worksheet
                              Range

A continuación se muestra una versión más detallada del objeto de la hoja de trabajo (tal como está en Excel 2007),

ingrese la descripción de la imagen aquí

El modelo de objetos de Excel completo se puede encontrar aquí.

Finalmente, algunos objetos pueden tener eventos (por ejemplo, Workbook.WindowActivate) que también forman parte del modelo de objetos de Excel.