Compartir a través de


Instrucción Declarar

Se usa en el nivel de módulo para declarar referencias a procedimientos externos en una biblioteca de vínculos dinámicos (DLL).

Nota:

Instrucciones Declarar con la palabra clave PtrSafe es la sintaxis recomendada. Las instrucciones Declare que incluyen PtrSafe funcionan correctamente en el entorno de desarrollo de la versión 7 de VBA tanto en plataformas de 32 bits como de 64 bits, solo después de que todos los tipos de datos de la instrucción Declare (parámetros y valores de retorno) que necesitan almacenar cantidades de 64 bits se actualicen para usar LongLong para integrales de 64 bits o LongPtr para punteros y controladores. Para garantizar la compatibilidad con la versión 6 y otras anteriores, siga los pasos siguientes:

#If VBA7 Then 
Declare PtrSafe Sub... 
#Else 
Declare Sub... 
#EndIf

Sintaxis 1

[ Público | Privado ] DeclareelsubnombreLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Sintaxis 2

[ Público | Privado ] Declararnombrede funciónLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Astype ]

Sintaxis de la instrucción Declare de VBA7

Nota:

Para que el código se ejecute en versiones de 64 bits de Microsoft Office, todas las instrucciones Declare deben incluir la palabra clave PtrSafe y todos los tipos de datos en la instrucción Declare (parámetros y valores de retorno) que necesiten almacenar cantidades de 64 bits deben actualizarse para usar LongLong para integrales de 64 bits o LongPtr para punteros y controladores.

Sintaxis 1 (Sub)

[ Público | Privado ] Declare el subnombrePtrSafeLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Sintaxis 2 (Function)

[ Público | Privado ] Declare el nombrede la funciónPtrSafeLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Astype ]

Parte Descripción
Public Opcional. Se usa para declarar procedimientos que están disponibles para todos los demás procedimientos en todos los módulos.
Private Opcional. Se usa para declarar procedimientos que están disponibles solo dentro del módulo en el que se realiza la declaración.
PtrSafe Necesario en la versión de 64 bits. La palabra clave PtrSafe confirma que es seguro ejecutar una instrucción Declare en versiones de 64 bits de Microsoft Office.
Sub Opcional (debe aparecer Sub o Function). Indica que el procedimiento no devuelve ningún valor.
Function Opcional (debe aparecer Sub o Function). Indica que el procedimiento devuelve un valor que puede usarse en una expresión.
name Obligatorio. Cualquier nombre de procedimiento válido. Tenga en cuenta que los puntos de entrada de la DLL distinguen mayúsculas de minúsculas.
Lib Obligatorio. Indica que una DLL o recurso de código contiene el procedimiento que se va a declarar. La cláusula Lib es necesaria para todas las declaraciones.
libname Obligatorio. Nombre de la DLL o recurso de código que contiene el procedimiento declarado.
Alias Opcional. Indica que el procedimiento al que se llama tiene otro nombre en la DLL. Esto es útil cuando el nombre del procedimiento externo coincide con la palabra clave. También puede usar Alias cuando un procedimiento DLL tiene el mismo nombre que una variable pública, una constante o cualquier otro procedimiento en el mismo ámbito. Alias también es útil si la convención de nomenclatura de la DLL no permite alguno de los caracteres del nombre de procedimiento de la DLL.
nombreAlias Opcional. Nombre del procedimiento en la DLL o en el recurso de código. Si el primer carácter no es un signo de almohadilla (#), aliasname es el nombre del punto de entrada del procedimiento en la DLL. Si (#) es el primer carácter, todos los caracteres siguientes indicarán el número ordinal del punto de entrada del procedimiento.
arglist Opcional. Lista de variables que representa los argumentos que se pasan al procedimiento cuando se realiza la llamada.
type Opcional. Tipo de datos del valor devuelto por un procedimiento Function; puede ser Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (no es compatible actualmente), Date, String (solo longitud de variable), Variant, un user-defined type o un object type. (LongLong es un tipo declarado válido solo en plataformas de 64 bits).

El argumento arglist consta de las siguientes sintaxis y partes:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ]

Parte Descripción
Optional Opcional. Indica que no se necesita un argumento. Si se usan, todos los argumentos siguientes en arglist también deben ser opcionales y declararse usando la palabra clave Optional. Optional no se puede usar para ningún argumento si se usa ParamArray.
ByVal Opcional. Indica que el argumento se pasa por valor.
ByRef Indica que el argumento se pasa por referencia. ByRef es el valor predeterminado en VBA, a diferencia de en Visual Basic .NET.
ParamArray Opcional. Solo se usa como último argumento de arglist para indicar que el argumento final es una matrizOpcional de elementos Variant. La palabra clave ParamArray le permite proporcionar un número arbitrario de argumentos. La palabra clave ParamArray no puede usarse con ByVal, ByRef ni Optional.
varname Obligatorio. Nombre de la variable que representa el argumento que se pasa al procedimiento; sigue las convenciones de nomenclatura de las variables estándar.
( ) Requerido para variables de matriz. Indica que nombrevar es una matriz.
type Opcional. Tipo de datos del argumento que ha pasado al procedimiento; puede ser Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (no es compatible actualmente), Date, String (solo longitud de variable), Object, Variant, un user-defined type o un object type. (LongLong es un tipo declarado válido solo en plataformas de 64 bits).

Observaciones

Declare Sub First Lib "MyLib" () 

Si incluye una lista de argumentos, el número y tipo de argumentos se comprueban cada vez que se llama al procedimiento. El siguiente ejemplo tiene un argumento Long:

Declare Sub First Lib "MyLib" (X As Long) 

Nota:

  • No puede tener en la lista de argumentos cadenas de longitud fija de una instrucción Declare; solo las cadenas de longitud variable pueden pasar a procedimientos. Las cadenas de longitud fija pueden aparecer como argumentos de procedimiento, pero se convierten en cadenas de longitud variable antes de pasarse.
  • La constante vbNullString se usa cuando se realizan llamadas a procedimientos externos que requieren una cadena con valor cero. No es lo mismo que una cadena de longitud cero ("").

Ejemplo

En este ejemplo se muestra cómo se usa la instrucción Declare en el nivel de módulo de un módulo estándar para declarar una referencia a un procedimiento externo en una biblioteca de vínculos dinámicos (DLL). Puede colocar las instrucciones Declare en módulos de clase si estas instrucciones Declare son privadas.

' In Microsoft Windows (16-bit): 
Declare Sub MessageBeep Lib "User" (ByVal N As Integer) 
' Assume SomeBeep is an alias for the procedure name. 
Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer) 
' Use an ordinal in the Alias clause to call GetWinFlags. 
Declare Function GetWinFlags Lib "Kernel" Alias "#132"()As Long 
 
' In 32-bit Microsoft Windows systems, specify the library USER32.DLL, 
' rather than USER.DLL. Use conditional compilation to write 
' code that can run on either Win32 or Win16. 
#If Win32 Then 
    Declare Sub MessageBeep Lib "User32" (ByVal N As Long) 
#Else 
    Declare Sub MessageBeep Lib "User" (ByVal N As Integer) 
#End If 
 
 
' 64-bit Declare statement example: 
Declare PtrSafe Function GetActiveWindow Lib "User32" () As LongPtr 
 
' Conditional Compilation Example 
#If Vba7 Then 
     ' Code is running in  32-bit or 64-bit VBA7. 
     #If Win64 Then 
          ' Code is running in 64-bit VBA7. 
     #Else 
          ' Code is not running in 64-bit VBA7. 
     #End If 
#Else 
     ' Code is NOT running in 32-bit or 64-bit VBA7. 
#End If 
 

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.