Página 1 de 1

Macro para acionar outras macros

Enviado: 01 Ago 2018 às 22:58
por italo013
Pessoal, boa noite!

Queria a ajuda de vocês, não manjo nada de VBA to começando a estudar, mas preciso fazer uma macro que acione outra macro.

O problema é o seguinte, tenho uma planilha com 20 guias, em cada guia tem uma macro, no caso a macro que tem em cada guia é a mesma em todas, ou seja, 1 macro que é utilizada em todas as guias. Eu quero fazer uma macro que eu acione a macro de todas as guias ao mesmo tempo, porque do jeito que ta eu tenho que ir em cada guia e acionar a macro.

Desde já eu agradeço!

Re: Macro para acionar outras macros

Enviado: 02 Ago 2018 às 08:53
por osvaldomp
Provavelmente utilizando somente uma macro ao invés de 20 seja possível fazer o trabalho em todas as planilhas do seu arquivo.

Sugestão - como os códigos que atuam nas 20 planilhas são iguais, disponibilize aqui uma cópia deles.

Re: Macro para acionar outras macros

Enviado: 02 Ago 2018 às 18:27
por italo013
Bom segue a planilha que estou trabalhando, apaguei algumas guias por isso os #REF e #VALOR.

Bom, como pode ver, tem 20 guias, cada uma delas tem uma macro, é a mesma macro pra todas as guias. O que eu quero fazer é criar uma macro que "aperte" a macro de todas as guias ao mesmo tempo, sem que eu precise ir em cada uma dela e "aperte".

Isso, porque pra calcular o resultado da carteira (guia Resultado Carteira) eu tenho que primeiro ir na guia de cada fundo e "apertar" pra calcular a rentabilidade.

Deu pra entender?

Re: Macro para acionar outras macros

Enviado: 03 Ago 2018 às 11:48
por osvaldomp
Substitua o código existente pelo código abaixo.
Este código será executado nas planilhas 1 a 20 e poderá ser rodado a partir de qualquer planilha do seu arquivo, no entanto, eu sugiro que você coloque um botão na planilha Resultado Carteira para rodá-lo. Não mais será necessário você acessar as planilhas de 1 a 20 para calcular a rentabilidade de cada uma, o código fará isso. Os botões "Calcula rentabilidade" existentes naquelas planilhas podem ser deletados.
Código: Selecionar todos
Sub calc_form_rent_fundo()
 Dim LR As Long, ws As Worksheet
  Application.Calculation = xlCalculationManual
   For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Resultado Carteira" And ws.Name <> "Índices" Then
     LR = ws.Cells(Rows.Count, 2).End(3).Row
     ws.Range("B8:H8").AutoFill ws.Range("B8:H" & LR)
     ws.Range("B8:H" & LR).Value = ws.Range("B8:H" & LR).Value
     ws.Range("K8:N8").AutoFill ws.Range("K8:N" & LR)
     ws.Range("K8:N" & LR).Value = ws.Range("K8:N" & LR).Value
    End If
   Next ws
  'calc_form_rent_carteira
  Application.Calculation = xlCalculationAutomatic
End Sub
Sugiro que você também substitua o código atual que é executado na planilha Resultado Carteira pelo código abaixo. Você poderá executá-lo a partir do botão existente naquela planilha ou poderá executá-lo automaticamente ao final do código Sub calc_form_rent_fundo, bastando para isso remover o apóstrofo inicial da linha 'calc_form_rent_carteira que coloquei naquele código.
Código: Selecionar todos
Sub calc_form_rent_carteira()
 Dim LR As Long
  Application.Calculation = xlCalculationManual
   With Sheets("Resultado Carteira")
     LR = .Cells(Rows.Count, 1).End(3).Row
     .Range("A7:H7").AutoFill .Range("A7:H" & LR)
     .Range("A8:H" & LR).Value = .Range("A8:H" & LR).Value
   End With
  Application.Calculation = xlCalculationAutomatic
End Sub
dicas - a fórmula abaixo existente em C6 da planilha Resultado Carteira
Código: Selecionar todos
='1'!I7+'2'!I7+'3'!I7+'4'!I7+'5'!I7+'6'!I7+'7'!I7+'8'!I7+'9'!I7+'10'!I7+'11'!I7+'12'!I7+'13'!I7+'14'!I7+'15'!I7+'16'!I7+'17'!I7+'18'!I7+'19'!I7+'20'!I7
pode ser substituída por
Código: Selecionar todos
=SOMA('1:20'!I7)
e em E6 por
Código: Selecionar todos
 =SOMA('1:20'!K7)
pode arrastá-las para baixo se quiser