Procedimentos “Function” e “Sub” no VBA

Funções VBA incorporadas

Antes de começar a criar suas próprias funções VBA, é bom saber que o Excel VBA tem uma rica coleção de funções internas pré-criadas que você pode usar ao escrever seu código.

Uma lista dessas funções pode ser visualizada no editor VBA:

  • Abra uma pasta de trabalho do Excel e inicie o editor VBA (clique para fazer isso Alt + F11) e, em seguida, pressione F2.
  • Selecione uma biblioteca na lista suspensa no canto superior esquerdo da tela VBA.
  • Uma lista de classes e funções VBA integradas aparecerá. Clique no nome da função para exibir sua breve descrição na parte inferior da janela. pressionando F1 abrirá a página de ajuda online para esse recurso.

Além disso, uma lista completa de funções internas do VBA com exemplos pode ser encontrada no Visual Basic Developer Center.

Procedimentos personalizados “Function” e “Sub” no VBA

No Excel Visual Basic, um conjunto de comandos que executam uma tarefa específica é colocado em um procedimento. função (Função) ou Sub (Sub-rotina). A principal diferença entre os procedimentos função и Sub é que o procedimento função retorna resultado, procedimento Sub - não.

Portanto, se você precisar executar ações e obter algum resultado (por exemplo, somar vários números), o procedimento geralmente é usado função, e para simplesmente realizar algumas ações (por exemplo, alterar a formatação de um grupo de células), você precisa selecionar o procedimento Sub.

Argumentos

Vários dados podem ser passados ​​para procedimentos VBA usando argumentos. A lista de argumentos é especificada ao declarar um procedimento. Por exemplo, o procedimento Sub no VBA adiciona o inteiro fornecido (Integer) a cada célula no intervalo selecionado. Você pode passar esse número para o procedimento usando um argumento, assim:

Sub AddToCells(i As Integer) ... End Sub

Tenha em mente que ter argumentos para procedimentos função и Sub em VBA é opcional. Alguns procedimentos não requerem argumentos.

Argumentos Opcionais

Os procedimentos VBA podem ter argumentos opcionais. São argumentos que o usuário pode especificar se quiser, e caso sejam omitidos, o procedimento utiliza os valores padrão para eles.

Voltando ao exemplo anterior, para tornar opcional um argumento inteiro para uma função, ele seria declarado assim:

Sub AddToCells(Opcional i As Integer = 0)

Neste caso, o argumento inteiro i o padrão será 0.

Pode haver vários argumentos opcionais em um procedimento, todos listados no final da lista de argumentos.

Passando argumentos por valor e por referência

Argumentos no VBA podem ser passados ​​para um procedimento de duas maneiras:

  • ByVal – passando um argumento por valor. Isso significa que apenas o valor (ou seja, uma cópia do argumento) é passado para o procedimento e, portanto, quaisquer alterações feitas no argumento dentro do procedimento serão perdidas quando o procedimento for encerrado.
  • PorRef – passando um argumento por referência. Ou seja, o endereço real da localização do argumento na memória é passado para o procedimento. Quaisquer alterações feitas em um argumento dentro do procedimento serão salvas quando o procedimento for encerrado.

Usando palavras-chave ByVal or PorRef na declaração do procedimento, você pode especificar como o argumento é passado para o procedimento. Isso é mostrado nos exemplos abaixo:

Sub AddToCells(ByVal i As Integer) ... End Sub
Neste caso, o argumento inteiro i passado por valor. Após sair do procedimento Sub tudo feito com i as mudanças serão perdidas.
Sub AddToCells(ByRef i As Integer) ... End Sub
Neste caso, o argumento inteiro i passado por referência. Após sair do procedimento Sub tudo feito com i as alterações serão armazenadas na variável que foi passada para o procedimento Sub.

Lembre-se de que os argumentos no VBA são passados ​​por referência por padrão. Em outras palavras, se as palavras-chave não forem usadas ByVal or PorRef, então o argumento será passado por referência.

Antes de prosseguir com os procedimentos função и Sub com mais detalhes, será útil examinar novamente os recursos e as diferenças entre esses dois tipos de procedimentos. A seguir estão breves discussões sobre os procedimentos do VBA função и Sub e exemplos simples são mostrados.

Procedimento VBA «Função»

O editor VBA reconhece o procedimento funçãoquando encontra um grupo de comandos entre as seguintes instruções de abertura e fechamento:

Função... Finalizar Função

Como mencionado anteriormente, o procedimento função em VBA (em oposição a Sub) retorna um valor. As seguintes regras se aplicam aos valores de retorno:

  • O tipo de dados do valor de retorno deve ser declarado no cabeçalho do procedimento função.
  • A variável que contém o valor de retorno deve ter o mesmo nome do procedimento função. Essa variável não precisa ser declarada separadamente, pois sempre existe como parte integrante do procedimento. função.

Isso é bem ilustrado no exemplo a seguir.

Exemplo de função VBA: realizando uma operação matemática em 3 números

O seguinte é um exemplo de um código de procedimento VBA função, que recebe três argumentos do tipo Double (números de ponto flutuante de precisão dupla). Como resultado, o procedimento retorna outro número de tipo Doubleigual à soma dos dois primeiros argumentos menos o terceiro argumento:

Função SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 End Function

Este procedimento VBA muito simples função ilustra como os dados são passados ​​para um procedimento por meio de argumentos. Você pode ver que o tipo de dados retornado pelo procedimento é definido como Double (as palavras dizem Como Duplo após a lista de argumentos). Este exemplo também mostra como o resultado do procedimento função armazenado em uma variável com o mesmo nome que o nome do procedimento.

Chamando o procedimento VBA “Função”

Se o procedimento simples acima função inserido em um módulo no editor Visual Basic, ele pode ser chamado de outros procedimentos VBA ou usado em uma planilha em uma pasta de trabalho do Excel.

Chame o procedimento VBA “Função” de outro procedimento

Procedimento função pode ser chamado de outro procedimento VBA simplesmente atribuindo esse procedimento a uma variável. O exemplo a seguir mostra uma chamada para um procedimento summinus, que foi definido acima.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Chame o procedimento VBA “Função” de uma planilha

procedimento VBA função pode ser chamado de uma planilha do Excel da mesma forma que qualquer outra função interna do Excel. Portanto, o procedimento criado no exemplo anterior função - summinus pode ser chamado inserindo a seguinte expressão em uma célula da planilha:

=SumMinus(10, 5, 2)

Procedimento VBA «Sub»

O editor VBA entende que existe um procedimento na frente dele Subquando encontra um grupo de comandos entre as seguintes instruções de abertura e fechamento:

Sub... Fim Sub

Procedimento VBA “Sub”: Exemplo 1. Alinhamento central e alteração do tamanho da fonte em um intervalo de células selecionado

Considere um exemplo de um procedimento VBA simples Sub, cuja tarefa é alterar a formatação do intervalo de células selecionado. As células são centralizadas (vertical e horizontalmente) e o tamanho da fonte é alterado para o especificado pelo usuário:

Sub Format_Centered_And_Sized(Opcional iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Este procedimento Sub executa ações, mas não retorna um resultado.

Este exemplo também usa um argumento Optional Tamanho da fonte. Se o argumento Tamanho da fonte não passou para o procedimento Sub, seu valor padrão é 10. No entanto, se o argumento Tamanho da fonte passou para o procedimento Sub, o intervalo de células selecionado será definido para o tamanho da fonte especificado pelo usuário.

Subprocedimento do VBA: Exemplo 2: Alinhamento ao centro e fonte em negrito no intervalo de células selecionado

O procedimento a seguir é semelhante ao que acabamos de discutir, mas desta vez, em vez de redimensionar, ele aplica um estilo de fonte em negrito ao intervalo de células selecionado. Este é um procedimento de exemplo Sub, que não recebe argumentos:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Chamando o procedimento “Sub” no Excel VBA

Chame o procedimento VBA “Sub” de outro procedimento

Para chamar um procedimento VBA Sub de outro procedimento VBA, você precisa escrever a palavra-chave Ligar, nome do procedimento Sub e mais entre parênteses estão os argumentos do procedimento. Isso é mostrado no exemplo abaixo:

Sub main() Chamar Format_Centered_And_Sized(20) End Sub

Se o procedimento Formato_Centerado_E_Tamanho tem mais de um argumento, eles devem ser separados por vírgulas. Assim:

Sub main() Chamar Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Chame o procedimento VBA “Sub” da planilha

Procedimento Sub não pode ser inserido diretamente em uma célula de planilha do Excel, como pode ser feito com um procedimento funçãoporque o procedimento Sub não retorna um valor. No entanto, os procedimentos Sub, que não têm argumentos e são declarados como Público (conforme mostrado abaixo) estará disponível para os usuários da planilha. Assim, se os procedimentos simples discutidos acima Sub inserido em um módulo no Editor do Visual Basic, o procedimento Formato_Centerado_E_Negrito estará disponível para uso em planilha Excel, e o procedimento Formato_Centerado_E_Tamanho – não estará disponível porque tem argumentos.

Aqui está uma maneira fácil de executar (ou executar) um procedimento Sub, acessível a partir da planilha:

  • Press Alt + F8 (pressione a tecla outro e mantendo-o pressionado, pressione a tecla F8).
  • Na lista de macros exibida, selecione aquela que você deseja executar.
  • Press Execute (corre)

Para realizar um procedimento Sub rápida e facilmente, você pode atribuir um atalho de teclado a ele. Por esta:

  • Press Alt + F8.
  • Na lista de macros exibida, selecione aquela à qual você deseja atribuir um atalho de teclado.
  • Press parâmetros (Opções) e na caixa de diálogo que aparece, digite o atalho de teclado.
  • Press OK e feche a caixa de diálogo Macro (Macro).

Atenção: Ao atribuir um atalho de teclado a uma macro, certifique-se de que ele não seja usado como padrão no Excel (por exemplo, Ctrl + C). Se você selecionar um atalho de teclado já existente, ele será reatribuído à macro e, como resultado, o usuário poderá iniciar a macro acidentalmente.

Escopo do Procedimento VBA

A Parte 2 deste tutorial discutiu o escopo de variáveis ​​e constantes e o papel das palavras-chave. Público и Privado. Essas palavras-chave também podem ser usadas com procedimentos VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Se a declaração do procedimento for precedida pela palavra-chave Público, o procedimento estará disponível para todos os módulos nesse projeto VBA.
Private Sub AddToCells(i As Integer) ... End Sub
Se a declaração do procedimento for precedida pela palavra-chave Privado, então este procedimento estará disponível apenas para o módulo atual. Ele não pode ser chamado enquanto estiver em nenhum outro módulo ou em uma pasta de trabalho do Excel.

Lembre-se que se antes de declarar um procedimento VBA função or Sub palavra-chave não é inserida, a propriedade padrão é definida para o procedimento Público (ou seja, estará disponível em todos os lugares deste projeto VBA). Isso contrasta com as declarações de variáveis, que por padrão são Privado.

Saída antecipada dos procedimentos VBA “Function” e “Sub”

Se você precisar encerrar a execução de um procedimento VBA função or Sub, sem esperar seu final natural, então para isso existem operadores Sair da função и Exit Sub. O uso desses operadores é mostrado abaixo usando um procedimento simples como exemplo. funçãoA que espera receber um argumento positivo para realizar outras operações. Se um valor não positivo for passado para o procedimento, nenhuma outra operação poderá ser executada, portanto, o usuário deverá receber uma mensagem de erro e o procedimento deverá sair imediatamente:

Função VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Se sVAT_Rate <= 0 Then MsgBox "Esperado um valor positivo de sVAT_Rate mas recebido " & sVAT_Rate Sair da função End If ... End Function

Observe que antes de concluir o procedimento função - Valor_IVA, uma função VBA integrada é inserida no código MsgBox, que exibe um pop-up de aviso para o usuário.

Deixe um comentário