Escolar Documentos
Profissional Documentos
Cultura Documentos
Sem configurações
Quando os dois Sub estão no mesmo módulo e não têm parâmetros. A Macro2 chama
a Macro1:
Sub Macro1()
MsgBox "Hello world!"
End Sub
Sub Macro2()
Call Macro1
End Sub
Sub Macro1()
MsgBox "Hello world!"
End Sub
Sub Macro2()
Macro1
End Sub
No entanto, eu não recomendo. Na verdade, esta instrução Call torna o código muito mais
legível. Ao lê-lo, o programador vê, imediatamente, que se trata da chamada de um
procedimento.
Quando os dois Sub estão em módulos diferentes e não têm parâmetros. Não é preciso
especificar o módulo. O exemplo anterior funcionará da mesma forma, porém você deverá
pensar na sua manutenção, desde a criação do seu código. O fato de especificar em que
módulo fica o procedimento chamado, fará com que você não perca tempo com pesquisas
inúteis durante os possíveis desbloqueios. Então, se a Macro1 estiver no Módulo1 e a
Macro2 no Módulo 2:
Sub Macro1()
MsgBox "Hello world!"
End Sub
Sub Macro2()
Call Module1.Macro1
End Sub
Com configurações
O método é o mesmo. Basta adicionar as configurações entre parênteses. No entanto,
cuidado ao digitar essas configurações, para evitar a geração de erro (do tipo 13). Se a
sua função espera um parâmetro digitado em string, não envie uma Dupla dobro:
Sub Macro2()
Call Macro1(18254, 654897)
End Sub
Sub Macro2()
Macro1 18254321, 654897
End Sub
Sub Macro2()
Call Module1.Macro1(918254321, 654897)
End Sub
Exemplo de Function:
Aqui vemos que a nossa Function é declarada como As Double (esta declaração de tipo é
opcional). O valor que ela retorna será do tipo duplo (Double). Como uma função retorna
um valor, você deverá, no Sub que chama, prever o armazenamento desse valor. Isso
pode se dar tanto em uma célula do Excel, como em uma variável (pensar em declarar a
variável no tipo certo), em um controle, etc.
Sub Macro2()
Dim Soma As Double
Soma = Addition(1234.56, 654.32)
MsgBox Soma
End Sub
Sub Macro2()
Dim Soma As Double
Soma = Addition(1234.56, 654.32)
MsgBox Soma
End Sub
Exemplo:
Gostaríamos que, quando houver uma alteração do valor da célula A1, apareça em
B1, "Nada mal!", se A1 for superior a 10. Para isso, vá no código do Módulo da planilha
em questão e clique direito na guia da planilha > Ver o Código.
Observação: você me dirá: "basta alterar o valor da A1 a partir da nossa macro, e isso
funcionará. Sim, você tem razão. Mas isso é apenas um exemplo.
Sub MaMacro()
Dim minhaLinha As Range
Set minhaLinha = Sheets("Planilha1").Range("A1")
Call Worksheet_Change(minhaLinha)
End Sub
Sub MinhaMacro()
Dim minhaLinha As Range
Set minhaLinha = Sheets("Planilha1").Range("A1")
CallByName Worksheets("Planilha1"), "Worksheet_Change", VbMethod, minhaLinha
End Sub
Outro exemplo:
Ao clicar em um botão do formulário de usuário (UserForm2), eu quero acionar o
evento ComboBox1_Change de uma lista suspensa situada num UserForm1:
Sub TestRun()
Application.Run "'Pasta1.xlsm'!Módulo2.Macro2"
End Sub
Sub TestRun()
Application.Run "'C:\Users\franck\Desktop\Pasta1.xlsm'!Módulo2.Macro2"
End Sub
Pasta já aberta:
Sub Principal()
Dim Soma As Double
Soma = Run("'Pasta1.xlsm'!Module2.Addition", 1234.56, 654.32)
MsgBox Soma
End Sub
Pasta fechada:
Sub Principal ()
Dim Soma As Double
Soma = Run("'C:\Users\franck\Desktop\Pasta1.xlsm'!Module2.Adição", 1234.56, 654.32)
MsgBox Soma
End Sub
Observação: se a sua pasta de trabalho foi previamente fechada, ela será aberta depois
da execução desta macro. Assim sendo, não se esqueça de fechá-la com um código.
Nosso último exemplo. Se adicionarmos o encerramento da pasta de trabalho, ficaria
assim:
Sub TestRun()
Dim Soma As Double
Soma = Run("'Pasta1.xlsm'!Module2.Addition", 1234.56, 654.32)
Workbooks("Pasta1.xlsm").Close False
MsgBox Soma
End Sub
Conclusão
Não deixe de compartilhar qualquer comentário sobre estas explicações. Qualquer dúvida,
poste sua pergunta no fórum adequado.
Foto: © Microsoft.
Veja também
Função call vba
Call sub vba
Call vba
Atualização de um procedimento ou função em VBA » Dicas - Excel
VBA - Procurar "Find" com retorno múltiplo » Dicas - Excel
Codificar uma função em VBA/Basic com retorno maior que um valor » Fórum -
Programação
VBA - Função que retorna a cor ativa do MFC » Dicas - Excel
VBA - Função NB.SI_Plus » Dicas - Excel
Dias
Professor ensina qualquer pessoa a absorver o inglês e faz sucesso na internetMétodo Inglês
Rápido
Com R$100 por mês a cada fatura você fica livre da anuidadeSantander
iPhone vendido por R$ 280 Público brasileiro descobre como obter pechinchas…Rincón Red
Novo clareador dental caseiro vira febre no BrasilBem Estar
Você sabe como investir na bolsa com pouco dinheiro? Veja aquiEmpiricus Research
Recomendado por
Artigo original publicado por pijaku. Tradução feita por pintuda. Última modificação: 2 de agosto de 2017 às
12:52 por Pedro.CCM.
Este documento, intitulado 'VBA: chamar uma macro em outra macro', está disponível sob a licença Creative
Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela
licença. Não se esqueça de creditar o CCM (https://br.ccm.net/) ao utilizar este artigo.
ANTERIOR
VBA InputBox e Application.InputBox do Excel
PRÓXIMO
Como adicionar uma folha em uma planilha no VBA
Equipe
Termos de uso
Contato
Regulamento
saude.ccm.net