Instrução Sub
Declara o nome, argumentos e código que formam o corpo de um procedimentoSub.
Sintaxe
[ Privado | Público | Amigo ] [ Estático ] Sub-nome [ ( arglist ) ]
[instruções]
[ Exit Sub ]
[instruções]
End Sub
A sintaxe da instrução Sub tem estas partes:
Parte | Descrição |
---|---|
Public | Opcional. Indica que o procedimento Sub é acessível para todos os outros procedimentos em todos os módulos. Se usado em um módulo que contém uma instrução Option Private, o procedimento não está disponível fora do projeto. |
Private | Opcional. Indica que o procedimento Sub é acessível somente para outros procedimentos no módulo em que é declarado. |
Friend | Opcional. Usado somente em um módulo de classe. Indica que o procedimento Sub fica visível durante todo o projeto, mas não é visível para um controlador de uma instância de um objeto. |
Static | Opcional. Indica que as variáveis locais do procedimento Sub são preservadas entre chamadas. O atributo Static não afeta variáveis que são declaradas fora do Sub, mesmo que sejam usadas no procedimento. |
name | Obrigatório. Nome do Sub; segue as convenções de nomenclatura padrão para variáveis. |
listadeargumentos | Opcional. A lista de variáveis que representa os argumentos passados para o procedimento Sub quando ele é chamado. Diversas variáveis separadas por vírgulas. |
instruções | Opcional. Qualquer grupo de instruções a serem executadas dentro do procedimento Sub. |
O argumento listadeargumentos tem as seguintes sintaxe e partes:
[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [()] [ Comotype ] [ =defaultValue ]
Sair | Descrição |
---|---|
Opcional | Opcional. Palavra-chave indicando que um argumento não é necessá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 | Opcional. 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. ParamArray não pode ser usada com ByVal, ByRef ou Optional. |
nomedavariável | Obrigatório. Nome da variável que representa o argumento passado; segue as convenções de nomenclatura de variável padrão. |
tipo | Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (sem suporte atualmente), Date, String (somente comprimento variável), Object, Variant ou um tipo de objeto específico. Se o parâmetro não for Optional, um tipo definido pelo usuário também poderá ser especificado. |
valorpadrão | Opcional. Qualquer constante ou expressão constante. Válido somente para parâmetros Optional. Se o tipo for Object, um valor padrão explícito só poderá ser Nothing. |
Comentários
Se não forem especificados explicitamente usando Public, Private ou Friend, os procedimentos Sub serão públicos por padrão.
Se Static não for usado, o valor de variáveis locais não será preservado entre chamadas.
A palavra-chave Friend só pode ser usada em módulos de classe. No entanto, procedimentos Friend podem ser acessados por procedimentos em qualquer módulo de um projeto. Um procedimento Friend não aparece na biblioteca de tipos de sua classe pai, e um procedimento Friend não ser pode associado tardiamente.
Procedimentos Sub podem ser recursivos, ou seja, podem chamar a si mesmos para realizar determinada tarefa. No entanto, a recursão pode levar a um estouro de pilha. A palavra-chave Static geralmente não é usada com procedimentos Sub recursivos.
Todo código executável deve estar em procedimentos. Não é possível definir um procedimento Sub dentro de outro procedimento Sub, Function ou Property.
As palavras-chave Exit Sub causam o encerramento imediato de um procedimento Sub. A execução do programa continua com a instrução após a instrução que chamou o procedimento Sub. Qualquer número de instruções Exit Sub pode aparecer em qualquer lugar em um procedimento Sub.
Assim como um procedimento Function, Sub é um procedimento separado que pode usar argumentos, executar uma série de instruções e alterar o valor de seus argumentos. No entanto, diferentemente de um procedimento Function, que retorna um valor, um procedimento Sub não pode ser usado em uma expressão.
Você chama um procedimento Sub usando o nome do procedimento seguido da lista de argumentos. Confira a instrução Call para obter informações específicas sobre como chamar procedimentos Sub.
As variáveis usadas em procedimentos Sub se enquadram em duas categorias: as que são declaradas dentro do procedimento e as que não são. As variáveis que são declaradas explicitamente em um procedimento (usando Dim ou o equivalente) são sempre locais para o procedimento. As variáveis que são usadas, mas não declaradas explicitamente em um procedimento, também são locais, a menos que sejam declaradas explicitamente em algum nível superior fora do procedimento.
Um procedimento pode usar uma variável que não é declarada explicitamente no procedimento, mas um conflito de nomenclatura poderá ocorrer se algo que você definiu no nível de módulo tiver o mesmo nome. Se o procedimento se refere a uma variável não declarada que tem o mesmo nome que outro procedimento, constante ou variável, pressupõe-se que o procedimento faça referência a esse nome de nível de módulo. Para evitar esse tipo de conflito, declare as variáveis explicitamente. Utilize uma instrução Option Explicit para forçar a declaração explícita de variáveis.
Observação
Não é possível usar GoSub, GoTo nem Return para entrar ou sair de um procedimento Sub.
Exemplo
Este exemplo usa a instrução Sub para definir o nome, os argumentos e o código que formam o corpo de uma instrução Sub.
' Sub procedure definition.
' Sub procedure with two arguments.
Sub SubComputeArea(Length, TheWidth)
Dim Area As Double ' Declare local variable.
If Length = 0 Or TheWidth = 0 Then
' If either argument = 0.
Exit Sub ' Exit Sub immediately.
End If
Area = Length * TheWidth ' Calculate area of rectangle.
Debug.Print Area ' Print Area to Debug window.
End Sub
Confira também
- Chamando os procedimentos Sub e Função
- Noções básicas sobre argumentos nomeados e argumentos opcionais
- Gravando um Procedimento Sub
- Tipos de dados
- Instruções
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.