Curso Excel VBA (6): Conceptos básicos del lenguaje Excel VBA - Variables

En este artículo, analizamos el contenido de las variables entre los conceptos básicos del lenguaje Excel VBA.

Esta es una continuación del artículo anterior.

Curso de Excel VBA (5): extensión de archivo de Excel, VBE, configuración de fuente

3. Conceptos básicos del lenguaje Excel VBA

3.1. variable

Examine la declaración de variables y los métodos de vinculación.

3.1.1. declaración de variables

Declare una variable con la siguiente sintaxis:

'변수 선언 문법
Dim <변수명> [As Type]

En Visual Basic, puede usar una variable sin declararla, e incluso si la declara, no puede especificar el tipo.

Dim t, x

Como arriba, no hay problema si no especifica el tipo al declarar las variables t y x.

Sin embargo, para reducir la posibilidad de errores o fallas y hacer que el código sea más fácil de leer, se recomienda observar lo siguiente.

  • Las variables deben ser declaradas y utilizadas. (Opción explícita recomendada)
  • También se debe especificar el tipo.
  • La notación húngara, que utiliza la abreviatura del tipo como prefijo, se aplica al nombre de la variable para que el tipo pueda reconocerse fácilmente.

'문자열 Title
Dim sTitle As String
  • No hay ningún problema si usa caracteres coreanos para nombres como nombres de variables, nombres de procedimientos y nombres de funciones. Si es difícil decidirse por un nombre de variable o si es necesario mejorar la legibilidad, use nombres coreanos activamente.

Los tipos y prefijos utilizados principalmente son los siguientes.

PrefijoEscribeLargoReferencia
sCuerda10 + longitud de la cuerdaSe pueden expresar alrededor de 2 mil millones de caracteres
iEntero2 bytesUmbrales: -32.768 a 32.767
yoLargo4 bytesLímites: -2.147.483.648 a 2.147.483.647
bbooleano2 bytesVerdadero Falso
oObjeto Objetos como Libro de trabajo, Hoja de trabajo, Rango y Colección
Tipo de variables principales de Visual Basic, prefijo

Un ejemplo de cómo declarar una variable usando el prefijo anterior es el siguiente.

Dim s단어 As String
Dim b단어발견 As Boolean
Dim oTargetBook As Workbook
Dim oTargetSht As Worksheet

3.1.2. Enlace anticipado variable, enlace tardío

El método en el que se determina el tipo de variable cuando se declara se denomina enlace anticipado, y el método en el que se determina cuando se ejecuta se denomina enlace tardío. Los conceptos, ejemplos, recomendaciones, ventajas y desventajas de los dos métodos se resumen en la siguiente tabla.

divisiónEnlace anticipadoEnlace tardío
conceptoCómo especificar un tipo al declarar una variable
Si no es un tipo incorporado, agregue una referencia a ese tipo y especifique el tipo
Cómo se especifican los tipos en el momento de la ejecución
ejemploEspada tenue como cuerda
Dim oRecordSet como ADO.RecordSet
espada tenue
Dim oRecordEstablecer como objeto
RecomendacionesRecomendado en la mayoría de los casosUsar solo cuando sea absolutamente necesario
(limitado solo al tipo de objeto)
VentajasFinalización automática al escribir código, soporte de ayuda dinámica (conveniente)
Dado que el tipo se determina en tiempo de compilación, es ventajoso para el rendimiento.
Si no hay una biblioteca de referencia en la computadora en ejecución, solo la parte del código enlazado en tiempo de ejecución no se ejecuta.
DesventajasSi no hay una biblioteca de referencia en la computadora en ejecución, no se ejecutará todoNo se admite la finalización automática al escribir código (inconveniente)
El rendimiento es relativamente bajo porque el tipo se determina en el momento de la ejecución y se vincula dinámicamente.
Comparación de vinculación anticipada variable, vinculación tardía

* Referencia: https://docs.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/binding-type-available-to-automation-clients

Veamos el código de ejemplo para cada método. Este es un código simple que crea el destinatario, el asunto y el contenido de un correo electrónico con Outlook y lo muestra en la pantalla.

Unión temprana vs. Código de ejemplo de enlace en tiempo de ejecución

El código de ejemplo del método de vinculación anticipada es el siguiente.

Sub SendOLMail_EarlyBound()
    ​​​​​' declare variables for the Application and Mailitem objects
    ​​​​Dim oAPP                       As Outlook.Application
    ​​​​Dim oItem                      As Outlook.MailItem
     
    ​​​​​' instantiate the Application
    ​​​​Set oAPP = New Outlook.Application
     
    ​​​​​' create a new email
    ​​​​Set oItem = oAPP.CreateItem(olMailItem)
     
    ​​​​​' set basic properties and display the email
    ​​​​With oItem
        ​​​​​​​​​.To = "foo@bar.com"
        ​​​​​​​​​.Subject = "this is a test"
        ​​​​​​​​​.Body = "nothing to see here"
        ​​​​​​​​​.Display
    ​​​​​End With
End Sub

Las variables oApp y oItem se designaron como Outlook.Application type y Outlook.MailItem type respectivamente al declararlas. En este caso, debe agregar una referencia a la biblioteca de Outlook de la siguiente manera.

필요한 type library 참조 추가
Agregue las referencias de biblioteca de tipos requeridas

Abra el menú "VBE > Herramientas > Referencias", marque "Biblioteca de objetos de Microsoft Outlook 16.0" en "Referencias disponibles" y haga clic en el botón Aceptar.

Cuando vuelva a abrir el menú de referencia, debería verse así:

type library 참조 추가 확인
Verifique agregar referencia de biblioteca de tipos

Si copia el archivo de macro (.xlsm o .xlsb) en el que se guarda este código VBA en una PC que no tiene instalado Outlook 16 y lo ejecuta, se produce un error que dice que no se puede encontrar el tipo.

Un código de ejemplo para el método de enlace en tiempo de ejecución es el siguiente.

Sub SendOLMail_LateBound()
    ​​​​​Dim oAPP                       As Object
    ​​​​​Dim oItem                      As Object
    ​​​​​' need to declare this constant as it has no meaning without
    ​​​​' the reference set to the Outlook library
    ​​​​Const olMailItem               As Long = 0

    ​​​​​' instantiate the Application - cannot use New without a reference
    ​​​​' so we must use CreateObject
    ​​​​Set oAPP = CreateObject("Outlook.Application")

    ​​​​'이후 코드는 동일
    ​​​​​' create a new email
    ​​​​Set oItem = oAPP.CreateItem(olMailItem)

    ​​​​​' set basic properties and display the email
    ​​​​With oItem
        ​​​​​​​​​.To = "foo@bar.com"
        ​​​​​​​​​.Subject = "this is a test"
        ​​​​​​​​​.Body = "nothing to see here"
        ​​​​​​​​​.Display
    ​​​​​End With
End Sub

Las variables oApp y oItem se designan como tipo de objeto en el momento de la declaración y el método de creación del objeto es diferente.

Cree un objeto con el siguiente código en la línea 10.

Establecer oAPP = CreateObject(“Outlook.Application”)

Para obtener una descripción detallada de la función CreateObject, consulte la siguiente URL.

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/createobject-function

Se dejan algunos extractos de la URL anterior.


Sintaxis

Crear objeto(clase, [nombre del servidor])

Él Crear objeto La sintaxis de la función tiene estas partes:

ParteDescripción
claseRequerido; Variante (Cuerda). El nombre de la aplicación y la clase del objeto que se va a crear.
nombre del servidorOpcional; Variante (Cuerda). El nombre del servidor de red donde se creará el objeto. Si servername es una cadena vacía (""), se usa la máquina local.

La clase argumento usa la sintaxis appname.objecttype y tiene estas partes:

ParteDescripción
nombre de la aplicaciónRequerido; Variante (Cuerda). El nombre de la aplicación que proporciona el objeto.
tipo de objetoRequerido; Variante (Cuerda). El tipo o clase de objeto a crear.

Si copia el archivo de macro (.xlsm o .xlsb) en el que se guarda este código VBA en una PC donde Outlook 16 no está instalado y lo ejecuta, se produce un error que dice que no se puede encontrar el tipo como en Enlace anticipado. La diferencia es que en el método de enlace temprano, todos los códigos no se ejecutan desde el principio si no hay una biblioteca de referencia, y en el método de enlace tardío, otros códigos operan y solo los códigos (procedimientos, funciones) que incluyen CreateObject no se ejecutan.


Hasta ahora, hemos analizado la declaración de variables y los métodos de vinculación. A continuación, explicaré la sintaxis del lenguaje VBA.


<< Lista de artículos relacionados >>

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESEspañol