Compartilhar via


Instrução Declare

Usada no nível do módulo para declarar referências a procedimentos externos em uma DLL (biblioteca de vínculo dinâmico).

Observação

Instruções Declare com a palavra-chave PtrSafe é a sintaxe recomendada. Instruções Declare que incluem PtrSafe só funcionam corretamente no ambiente de desenvolvimento do VBA versão 7 em plataformas de 32 e 64 bits depois que todos os tipos de dados na instrução Declare (parâmetros e valores de retorno) que precisam armazenar quantidades de 64 bits forem atualizados para usar LongLong para integrais de 64 bits ou LongPtr para ponteiros e identificadores. Para garantir a compatibilidade com o VBA 6 e anteriores, use a seguinte construção:

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

Sintaxe 1

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

Sintaxe 2

[ Público | Privado ] DeclareNome da funçãoLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Comotipo ]

Sintaxe da instrução Declare do VBA7

Observação

Para que o código seja executado em versões de 64 bits do Microsoft Office, todas as instruções Declare deverão incluir a palavra-chave PtrSafe, e todos os tipos de dados na instrução Declare (parâmetros e valores de retorno) que precisarem armazenar quantidades de 64 bits deverão ser atualizados para usar LongLong para inteiros de 64 bits ou LongPtr para ponteiros e identificadores.

Sintaxe 1 (Sub)

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

Sintaxe 2 (Função)

[ Público | Privado ] Declare o nome da FunçãoPtrSafeLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Comotipo ]

Sair Descrição
Public Opcional. Usado para declarar procedimentos disponíveis para todos os outros procedimentos em todos os módulos.
Private Opcional. Usado para declarar procedimentos disponíveis apenas no módulo onde a declaração é feita.
PtrSafe Obrigatório em 64 bits. A palavra-chave PtrSafe declara que uma instrução Declare pode ser executada com segurança em versões de 64 bits do Microsoft Office.
Sub Opcional (Sub ou Function deve aparecer). Indica que o procedimento não retorna um valor.
Function Opcional (Sub ou Function deve aparecer). Indica que o procedimento retorna um valor que pode ser usado em uma expressão.
nome Obrigatório. Qualquer nome de procedimento válido. Observe que os pontos de entrada da DLL diferenciam maiúsculas de minúsculas.
Lib Obrigatório. Indica que uma DLL ou um recurso de código contém o procedimento declarado. A cláusula Lib é necessária para todas as declarações.
nomedabiblioteca Obrigatório. Nome da DLL ou do recurso de código que contém o procedimento declarado.
Alias Opcional. Indica que o processamento chamado tem outro nome na DLL. Isso será útil quando o nome do procedimento externo for igual à palavra-chave. Você também pode usar Alias quando um procedimento de DLL tiver o mesmo nome que uma variável pública, constante ou qualquer outro procedimento no mesmo escopo. Alias também será útil se algum caractere no nome de procedimento da DLL não for permitido pela convenção de nomenclatura da DLL.
nomedoalias Opcional. Nome do procedimento na DLL ou no recurso de código. Se o primeiro caractere não for um sinal de número (#), nomedoalias será o nome do ponto de entrada do procedimento na DLL. Se (#) for o primeiro caractere, todos os caracteres a seguir deverão indicar o número ordinal do ponto de entrada do procedimento.
listadeargumentos Opcional. A lista de variáveis que representa argumentos passados para o procedimento quando ele é chamado.
tipo Opcional. Tipo de dados do valor retornado por um procedimento Function; pode ser Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (sem suporte no momento), Date, String (somente comprimento de variável) ou Variant, um tipo definido pelo usuário ou um tipo de objeto. (LongLong é um tipo declarado válido apenas em plataformas de 64 bits).

O argumento listadeargumentos tem as seguintes sintaxe e partes:

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

Parte Descrição
Opcional Opcional. Indica se um argumento não é obrigatório. Se for usado, todos os argumentos subsequentes em arglist também deverão ser opcionais e declarados usando a palavra-chave Optional. Optional não podem ser usados para um argumento se ParamArray for usado.
ByVal Opcional. Indica se o argumento será passado por valor.
ByRef Indica se o argumento será passado por referência. ByRef é a predefinição no VBA, ao contrário do Visual Basic .NET.
ParamArray Opcional. Utilizado apenas como o último argumento em arglist para indicar que o argumento final é uma matrizOpcional de elementos Variante. A palavra-chave ParamArray permite que você forneça um número aleatório de argumentos. A palavra-chave ParamArray não pode ser usada com ByVal, ByRef ou Optional.
nomedavariável Obrigatório. Nome da variável que representa o argumento passado para o procedimento; segue as convenções de nomenclatura da variável padrão.
( ) Obrigatório para variáveis de matriz. Indica que nomedavariável é uma matriz.
type Opcional. O tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (sem suporte no momento), Date, String (somente comprimento variável), Object, Variant, um tipo definido pelo usuário ou um tipo de objeto. (LongLong é um tipo declarado válido apenas em plataformas de 64 bits).

Comentários

Declare Sub First Lib "MyLib" () 

Se você incluir uma lista de argumentos, o número e o tipo de argumentos serão verificados sempre que o procedimento for chamado. O exemplo a seguir aceita um argumento Long:

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

Observação

  • Você não pode ter cadeias de caractere de comprimento fixo na lista de argumentos de uma instrução Declare; só é possível passar cadeias de caracteres de comprimento variável para os procedimentos. As cadeias de caractere de comprimento fixo podem aparecer como argumentos procedimento, mas são convertidas em cadeias de caractere de comprimento variável antes de serem passadas.
  • A constante vbNullString é usada durante a chamada a procedimentos externos, onde o procedimento externo exige uma cadeia de caracteres de valor zero. Ela não é igual a uma cadeia de caracteres de comprimento zero ("").

Exemplo

Este exemplo mostra como a instrução Declare é usada no nível do módulo de um módulo padrão para declarar uma referência a um procedimento externo em uma biblioteca de vínculo dinâmico (DLL). Você poderá posicionar a instrução Declare em módulos de classe se as instruções Declare forem 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. 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 
 

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.