Você está na página 1de 8

Visual Basic para Aplicaciones (VBA)

1. Referencia del lenguaje de Visual Basic para Aplicaciones (VBA)

Le damos la bienvenida a la referencia del lenguaje de Visual Basic para Aplicaciones


(VBA) para Office. Esta referencia contiene información general conceptual, tareas de
programación, ejemplos y referencias para guiarlo en el desarrollo de soluciones basadas
en VBA.

Use la tabla de contenidos en el panel de navegación de la izquierda para ver los


temas en las secciones siguientes:

1.1. Temas conceptuales de Visual Basic

Proporciona información para ayudarle a empezar con la programación de


Visual Basic.

 Información general sobre Visual Basic para Aplicaciones de 64 bits

Microsoft Visual Basic for Applications (VBA) es la versión de Visual Basic que se incluye
con Microsoft Office. En Microsoft Office 2010, VBA incluye características de idioma que
habilitan el código VBA para ejecutarse correctamente tanto en entornos de 32 bits y de
64 bits.

El código de ejecución VBA que se escribió antes de la versión de Office 2010 (versión
VBA 6 y versiones anteriores) en una plataforma de 64 bits puede producir errores si no
se modifica el código para ejecutar en versiones de 64 bits de Office. Se producirán
errores porque VBA versión 6 y anteriores implícitamente tienen como destino
plataformas de 32 bits y normalmente contiene ** instrucciones de declaración ** que
llaman a la API de Windows, con tipos de datos de 32 bits para punteros y
controladores. Puesto que no tiene un tipo de datos específicos para punteros o
controladores, VBA versión 6 y anteriores utilizan el tipo de datos largo, que es un tipo
de datos de 4 bytes de 32 bits para punteros y controladores de referencia. Los punteros
y los controladores en entornos de 64 bits son cantidades de 64 bits de 8 byte. Estas
cantidades de 64 bits no se mantendrá en tipos de datos de 32 bits.

El problema con la ejecución de código VBA heredado de 64 bits de Office es


que intentar cargar 64 bits en un tipo de datos de 32 bits trunca la cantidad de
64 bits. Esto puede traducirse en saturación de memoria, resultados inesperados
en el código y posibles errores de aplicación.

Para resolver este problema y habilitar el código VBA para que funcione
correctamente en entornos de 32 bits y 64 bits, se han agregado a VBA varias
características de idioma. La tabla al final de este documento resume las nuevas
características de idioma VBA. Tres adiciones importantes son el alias de
tipoLongPtr, el tipo de datos LongLong y las palabras clave PtrSafe.

 LongPtr. VBA ahora incluye el alias de tipo variable LongPtr. El tipo actual
de datos que resuelve LongPtr depende de la versión de Office que se
esté ejecutando; LongPtr resuelve Long en versiones de 32-bit de Office
y LongPtr resuelve LongLong en versiones de 64-bit de
Office. Use LongPtr para punteros y controladores.
 LongLong. El tipo de datos LongLong es un entero de 64 bits firmado
que solo está disponible en versiones de 64 bits de
Office. Use LongLong para integrales de 64 bits. Las funciones de
conversión deben usarse para asignar
explícitamente LongLong (incluido LongPtr en plataformas de 64 bits) a
tipos enteros más pequeños. No se permiten las conversiones implícitas
de LongLong a integrales menores.
 PtrSafe. La palabra clave PtrSafe confirma que una
instrucción Declarar es segura para ejecutar en versiones de 64 bits de
Office.
Considere los ejemplos de instrucciones Declarar. Ejecutar la sin modificar la
instrucción Declarar en versiones de 64 bits de Office se producirá un error que
indica que la instrucción Declarar no incluye el calificador PtrSafe. El ejemplo
VBA modificado contiene el calificador PtrSafe, pero tenga en cuenta que el
valor devuelto (un puntero a la ventana activa) devuelve un tipo de
datos largo. En Office de 64 bits, esto es incorrecto porque el puntero necesita
ser de 64 bits. El calificador PtrSafe indica al compilador que la
instrucción Declarar está orientada a 64 bits, por lo que se ejecuta la instrucción
sin errores. Pero debido a que ya no se actualizó el valor devuelto a un tipo de
datos de 64 bits, el valor devuelto se trunca y da como resultado un valor
incorrecto devuelto.

Ejemplo de instrucción de VBA heredada no modificada Declarar:


En resumen, para que el código trabaje en versiones de 64 bits de Office, tendrá que
buscar y modificar todas las instrucciones Declarar para usar el
calificador PtrSafe. También necesita buscar y modificar todos los tipos de datos dentro
de estas instrucciones Declarar que hacen referencia a los controladores o punteros para
usar el nuevo alias de tipo compatible de 64 bits LongPtr y tipos que necesitan contener
64 bits integrales con el nuevo tipo de datos LongLong.Además, debe actualizar
cualquier tipo definido por el usuario (UDT) que contiene punteros o controladores de
64 bits integrales para usar tipos de datos de 64 bits y comprobar que todas las
asignaciones de variables son correctas para evitar errores de coincidencia de tipo.

Escritura de código que funciona en ambas versiones de 32 bits y 64 bits de Office

Para escribir el código que puede mover datos entre versiones de 32 bits y 64
bits de Office, solo necesita usar el nuevo tipo de alias LongPtr en lugar
de Long o LongLong para todos los valores de punteros y controladores. El tipo
de alias LongPtrse resolverá al tipo de datos correcto Long o LongLong según
qué versión de Office se está ejecutando.

Tenga en cuenta que si necesita ejecutar una lógica diferente, por ejemplo, si
necesita usar valores de 64 bits en proyectos de Excel de gran tamaño, puede
usar la constante de compilación condicional Win64 como se muestra en la
siguiente sección.
Escritura de código que funciona en Office 2010 (32 bits o 64 bits) y versiones
anteriores de Office

Para escribir el código que puede funcionar tanto en versiones nuevas y antiguas
de Office, puede usar una combinación de las nuevas
constantes VBA7 y Win64 condicionales de compilación. La constante de
compilación condicional Vba7 se utiliza para determinar si está ejecutando
código en la versión 7 del editor VB (la versión VBA que se incluye en Office
2010). La constante de compilación condicional Win64 se utiliza para determinar
qué versión (32 bits o 64 bits) de Office se está ejecutando.

Resumen de actualizaciones de idioma de VBA7

La siguiente tabla resume las nuevas adiciones de idioma de VBA y ofrece una
explicación de cada una:
Nombre Tipo Descripción

PtrSafe Palabra clave Afirma que una instrucción Declarar está orientada a
sistemas de 64 bits. Necesario en la versión de 64 bits.

LongPtr Tipo de datos Alias de tipo que se asigna a Long en sistemas de 32


bits o LongLong en sistemas de 64 bits.

LongLong Tipo de datos tipo de datos de 8 bytes que solo está disponible en los
sistemas de 64 bits. Tipo numérico Un valor entero
entre -9,223,372,036,854,775,808 y
9,223,372,036,854,775,807.

LongLong es un tipo declarado válido solo en


plataformas de 64 bits. Además, LongLong no se puede
convertir implícitamente en un tipo de menor (por
ejemplo, no puede asignar un LongLong a
un Long). Esto se realiza para evitar un truncamiento de
puntero involuntario.

Las conversiones explícitas están permitidas, por lo que


en el ejemplo anterior, puede aplicar CLng a
Nombre Tipo Descripción

un LongLong y asignar el resultado de un Long (válido


en plataformas de 64 bits solo).

^ Carácter de Declare explícitamente un valor literal como


declaración de un LongLong. Es necesario para declarar un valor
tipo LongLong literal LongLong que es más grande que el valor
máximo Long (en caso contrario se convertirá
implícitamente en Double).

CLngPtr función de Convierte una expresión sencilla en un LongPtr.


conversión de tipos

CLngLng función de Convierte una expresión sencilla en un tipo de


conversión de tipos datos LongLong (válido solamente en plataformas de
64 bits).

vbLongLong Constante VarType LongLong entero (válido solo para plataformas de 64


bits).

DefLngPtr Instrucción DefType Establece el tipo de datos predeterminado para un


intervalo de variables como LongPtr.

DefLngLng Instrucción DefType Establece el tipo de datos predeterminado para un


intervalo de variables como LongLong.

 Evitar conflictos de nombres

Si intenta crear o usar un identificador que ya se ha definido con anterioridad, se


producirá un conflicto de nombres. En algunos casos, los conflictos de nombres
generan errores como el nombre ambiguo detectado o la declaración
duplicada en el ámbito actual. Los conflictos de nombres que no se detectan
pueden derivar en errores de código que provocarán resultados erróneos,
especialmente si no declara de forma explícita todas las variables antes del primer
uso.

Evitará la mayoría de los conflictos de nombres si comprende bien la definición


del ámbito y losniveles de módulo privado y el público.
Puede producirse un conflicto de nombres si un identificador:

 Resulta visible en varios niveles de ámbito.


 Tiene dos significados diferentes en el mismo nivel.

Por ejemplo, se puede asignar el mismo nombre a procedimientos ubicados


en módulos distintos. Por ello, si lo desea puede definir un procedimiento
llamado MySub en cada uno de los módulos Mod1 y Mod2. Mientras se llame a cada
procedimiento desde otros procedimientos ubicados en su propio módulo, no se
producirá ningún conflicto. Sin embargo, se puede producir un MySub error si se
le llama desde un tercer módulo y no se proporciona ninguna calificación para
distinguir MySub entre los dos procedimientos.

La mayor parte de los conflictos de nombres pueden resolverse si se precede a cada


identificador de un calificador consistente en el nombre del módulo y, si resulta
necesario, de un nombre de proyecto. Por ejemplo:

 Procedimientos de llamada con el mismo nombre


 Llamar a procedimientos Property
 Llamar a procedimientos Sub y Function
 Crear variables de objeto
 Crear procedimientos recursivos
 Declarar matrices
 Declarar constantes
 Declarar variables
 Ejecutar código al establecer propiedades
 Recorrer en bucle del código
 Hacer que los bucles For…Next se ejecuten más rápido
 Pasar argumentos de manera eficiente
 Devolver cadenas desde funciones
 Información sobre la automatización
 Información sobre la compilación condicional
 Información sobre argumentos con nombre y argumentos opcionales
 Información sobre objetos, propiedades, métodos y eventos
 Información sobre matrices de parámetros
 Información sobre ámbito y visibilidad
 Información sobre la duración de las variables
 Información sobre variantes
 Información sobre la sintaxis de Visual Basic
 Usar matrices
 Usar constantes
 Usar tipos de datos de forma eficiente
 Usar instrucciones Do…Loop
 Usar instrucciones For Each…Next
 Usar instrucciones For…Next
 Usar instrucciones If…Then…Else
 Usar paréntesis en el código
 Usar instrucciones Select Case
 Uso del Administrador de complementos
 Usar instrucciones With
 Reglas de nomenclatura de Visual Basic
 Trabajar entre aplicaciones
 Escribir un procedimiento Function
 Escribir un procedimiento Property
 Escribir un procedimiento Sub
 Escribir instrucciones de asignación
 Escribir datos en archivos
 Escribir instrucciones de declaración
 Escribir instrucciones ejecutables
 Escribir instrucciones de Visual Basic

1.1.1.
1.2. Proporciona información para ayudarle a entender la programación de
Visual Basic.
1.3. Temas conceptuales de Microsoft Forms
1.4. Proporciona información sobre UserForms y controles, y cómo
programar con ellos con Visual Basic.
1.5. Temas de procedimientos de Visual Basic
1.6. Describe procedimientos comunes y útiles (por ejemplo, cómo usar
el Examinador de objetos o cómo establecer opciones en el entorno de
Visual Basic).
1.7. Referencia del lenguaje de Visual Basic
1.8. Proporciona documentación sobre el lenguaje de Visual Basic: todos los
métodos, propiedades, instrucciones, funciones, operadores y objetos.
1.9. Definiciones de Visual Basic
1.10. Proporciona un glosario de definiciones para ayudarle a entender
los conceptos que se presentan en esta documentación.
1.11. Modelo de complementos de Visual Basic
1.12. Describe cómo personalizar el Editor de Visual Basic y proporciona
documentación para el modelo de objetos que le permite ampliar el
entorno.
1.13. Ayuda de la interfaz de usuario
1.14. Describe los elementos de la interfaz de usuario del Editor de Visual
Basic, como comandos, cuadros de diálogo, ventanas y barras de
herramientas. La sección de mensajes de error contiene las causas y soluciones
comunes para todos los problemas que pueda tener.

Você também pode gostar