Instrucción DeclararDeclare statement

Se usa en el nivel de módulo para declarar referencias a procedimientos externos en una biblioteca de vínculos dinámicos (DLL).Used at the module level to declare references to external procedures in a dynamic-link library (DLL).

Nota

Instrucciones Declarar con la palabra clave PtrSafe es la sintaxis recomendada.Declare statements with the PtrSafe keyword is the recommended syntax. 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.Declare statements that include PtrSafe work correctly in the VBA version 7 development environment on both 32-bit and 64-bit platforms only after all data types in the Declare statement (parameters and return values) that need to store 64-bit quantities are updated to use LongLong for 64-bit integrals or LongPtr for pointers and handles. Para garantizar la compatibilidad con la versión 6 y otras anteriores, siga los pasos siguientes:To ensure backwards compatibility with VBA version 6 and earlier, use the following construct:

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

Sintaxis 1Syntax 1

[ Public | Private ] Declare SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ][ Public | Private ] Declare SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Sintaxis 2Syntax 2

[ Public | Private ] Declarar Función nombre de Lib "nombrebibl" [ alias "aliasname"] [([ listaarg ])] [ as tipo ][ Public | Private ] Declare FunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ As type ]

Sintaxis de la instrucción Declare de VBA7VBA7 Declare statement syntax

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.For code to run in 64-bit versions of Microsoft Office, all Declare statements must include the PtrSafe keyword, and all data types in the Declare statement (parameters and return values) that need to store 64-bit quantities must be updated to use LongLong for 64-bit integrals or LongPtr for pointers and handles.

Sintaxis 1 (Sub)Syntax 1 (Sub)

[ Public | Private ] Declare PtrSafe SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ][ Public | Private ] Declare PtrSafe SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Sintaxis 2 (Function)Syntax 2 (Function)

[ Public | Private ] Declarar PtrSafe Función nombre de Lib "nombrebibl" [ alias "aliasname"] [([ listaarg ])] [ as tipo ][ Public | Private ] Declare PtrSafe FunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ As type ]

PartPart DescripciónDescription
PublicPublic Opcional.Optional. Se usa para declarar procedimientos que están disponibles para todos los demás procedimientos en todos los módulos.Used to declare procedures that are available to all other procedures in all modules.
PrivatePrivate Opcional.Optional. Se usa para declarar procedimientos que están disponibles solo dentro del módulo en el que se realiza la declaración.Used to declare procedures that are available only within the module where the declaration is made.
PtrSafePtrSafe Necesario en la versión de 64 bits.Required on 64-bit. La palabra clave PtrSafe confirma que es seguro ejecutar una instrucción Declare en versiones de 64 bits de Microsoft Office.The PtrSafe keyword asserts that a Declare statement is safe to run in 64-bit versions of Microsoft Office.
SubSub Opcional (debe aparecer Sub o Function).Optional (either Sub or Function must appear). Indica que el procedimiento no devuelve ningún valor.Indicates that the procedure doesn't return a value.
FunctionFunction Opcional (debe aparecer Sub o Function).Optional (either Sub or Function must appear). Indica que el procedimiento devuelve un valor que puede usarse en una expresión.Indicates that the procedure returns a value that can be used in an expression.
namename Necesario.Required. Cualquier nombre de procedimiento válido.Any valid procedure name. Tenga en cuenta que los puntos de entrada de la DLL distinguen mayúsculas de minúsculas.Note that DLL entry points are case-sensitive.
LibLib Necesario.Required. Indica que una DLL o recurso de código contiene el procedimiento que se va a declarar.Indicates that a DLL or code resource contains the procedure being declared. La cláusula Lib es necesaria para todas las declaraciones.The Lib clause is required for all declarations.
libnamelibname Necesario.Required. Nombre de la DLL o recurso de código que contiene el procedimiento declarado.Name of the DLL or code resource that contains the declared procedure.
AliasAlias Opcional.Optional. Indica que el procedimiento al que se llama tiene otro nombre en la DLL.Indicates that the procedure being called has another name in the DLL. Esto es útil cuando el nombre del procedimiento externo coincide con la palabra clave.This is useful when the external procedure name is the same as a keyword. 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.You can also use Alias when a DLL procedure has the same name as a public variable, constant, or any other procedure in the same scope. 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.Alias is also useful if any characters in the DLL procedure name aren't allowed by the DLL naming convention.
nombreAliasaliasname Opcional.Optional. Nombre del procedimiento de la DLL o del recurso de código.Name of the procedure in the DLL or code resource. Si el primer carácter no es un signo de almohadilla (#), aliasname es el nombre del punto de entrada del procedimiento en la DLL.If the first character is not a number sign (#), aliasname is the name of the procedure's entry point in the DLL. Si (#) es el primer carácter, todos los caracteres siguientes indicarán el número ordinal del punto de entrada del procedimiento.If (#) is the first character, all characters that follow must indicate the ordinal number of the procedure's entry point.
arglistarglist Opcional.Optional. Lista de variables que representa los argumentos que se pasan al procedimiento cuando se realiza la llamada.List of variables representing arguments that are passed to the procedure when it is called.
typetype Opcional.Optional. 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.Data type of the value returned by a Function procedure; may be Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Variant, a user-defined type, or an object type. (LongLong es un tipo declarado válido solo en plataformas de 64 bits).(LongLong is a valid declared type only on 64-bit platforms.)

El argumento arglist consta de las siguientes sintaxis y partes:The arglist argument has the following syntax and parts:

[ Opcional ] [ ByVal | ByRef ] [ ParamArray ] varname [()] [ As tipo ][ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ As type ]

PartPart DescripciónDescription
OptionalOptional Opcional.Optional. Indica que no se necesita un argumento.Indicates that an argument is not required. Si se usan, todos los argumentos siguientes en arglist también deben ser opcionales y declararse usando la palabra clave Optional.If used, all subsequent arguments in arglist must also be optional and declared by using the Optional keyword. Optional no se puede usar para ningún argumento si se usa ParamArray.Optional can't be used for any argument if ParamArray is used.
ByValByVal Opcional.Optional. Indica que el argumento se pasa por valor.Indicates that the argument is passed by value.
ByRefByRef Indica que el argumento se pasa por referencia.Indicates that the argument is passed by reference. ByRef es el valor predeterminado en Visual Basic.ByRef is the default in Visual Basic.
ParamArrayParamArray Opcional.Optional. Solo se usa como último argumento de arglist para indicar que el argumento final es una matriz opcional de elementos de Variant.Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. La palabra clave ParamArray le permite proporcionar un número arbitrario de argumentos.The ParamArray keyword allows you to provide an arbitrary number of arguments. La palabra clave ParamArray no puede usarse con ByVal, ByRef ni Optional.The ParamArray keyword can't be used with ByVal, ByRef, or Optional.
varnamevarname Obligatorio.Required. Nombre de la variable que representa el argumento que se pasa al procedimiento; sigue las convenciones de nomenclatura de las variables estándar.Name of the variable representing the argument being passed to the procedure; follows standard variable naming conventions.
( ) Es necesario para las variables de matriz.Required for array variables. Indica que varname es una matriz.Indicates that varname is an array.
typetype Opcional.Optional. 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.Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Object, Variant, a user-defined type, or an object type. (LongLong es un tipo declarado válido solo en plataformas de 64 bits).(LongLong is a valid declared type only on 64-bit platforms.)

ObservacionesRemarks

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.If you include an argument list, the number and type of arguments are checked each time the procedure is called. El siguiente ejemplo tiene un argumento Long:The following example takes one Long argument:

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.You can't have fixed-length strings in the argument list of a Declare statement; only variable-length strings can be passed to procedures. Las cadenas de longitud fija pueden aparecer como argumentos de procedimiento, pero se convierten en cadenas de longitud variable antes de pasarse.Fixed-length strings can appear as procedure arguments, but they are converted to variable-length strings before being passed.
  • La constante vbNullString se usa cuando se realizan llamadas a procedimientos externos que requieren una cadena con valor cero.The vbNullString constant is used when calling external procedures, where the external procedure requires a string whose value is zero. No es lo mismo que una cadena de longitud cero ("").This is not the same thing as a zero-length string ("").

EjemploExample

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).This example shows how the Declare statement is used at the module level of a standard module to declare a reference to an external procedure in a dynamic-link library (DLL). Puede colocar las instrucciones Declare en módulos de clase si estas instrucciones Declare son privadas.You can place the Declare statements in class modules if the Declare statements are Private.

' 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. You can 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énSee also

Soporte técnico y comentariosSupport and feedback

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación?Have questions or feedback about Office VBA or this documentation? 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.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.