Jump to content
Nuno Teixeira

Executar macro dentro de outra macro VBA

Recommended Posts

Nuno Teixeira

Boa tarde a todos,

Sou novo neste fórum, pelo que desconheço se já foi aberto um tópico com este tema. Se assim foi, peço desculpa pelo facto. A minha questão é esta: na sequência de uma funcionalidade para uma aplicação que estou a desenvolver em VBA, criei uma macro para inserir uma autoshape numa dada posição da folha de excel. Até aqui tudo simples. Agora, gostaria que essa autoshape, quando clicada, executasse uma nova macro (inserir nova autoshape noutra posição da folha. Já tentei usar os comandos Application.Run e Call, mas até ao momento sem sucesso. Alguém consegue ajudar-me?

O códio da 1ª macro é este:

ActiveSheet.Shapes.AddShape(msoShapeRectangle, Range("j1").Left, Range("j1").Top, 8, 8).ZOrder msoBringToFront

A 2ª macro que quero que seja executada tem estas propriedades:

ActiveSheet.Shapes.AddShape(msoShapeRectangle, Range("h78").Left, Range("h78").Top, 8, 8).ZOrder msoBringToFront

Obrigado a todos.

Cumprimentos

Share this post


Link to post
Share on other sites
FreiNando

Para fazeres isso tens de indicar a macro a executar ao fazer click no shape.

Insere um modulo e coloca as macros seguintes lá:

Public Sub Macro1()
   Dim SH As Shape
   Set SH = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Range("j1").Left, Range("j1").Top, 8, 8)
   SH.ZOrder msoBringToFront
   SH.OnAction = "Macro2"

   SH.Name = "Shape1" 'para futura referência
End Sub

Public Sub Macro2()
   Dim SH As Shape
   Set SH = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Range("h78").Left, Range("h78").Top, 8, 8)
   SH.ZOrder msoBringToFront

   ActiveSheet.Shapes("Shape1").OnAction = "" ' para desligar nova execução desta macro
End Sub


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
Nuno Teixeira

Boa tarde,

Antes de mais muito obrigado pelo código. Funcionou perfeitamente bem. Queria pedir-lhe apenas mais um favor: se quiser que a 2ª macro esteja sempre pronta a ser executada, quais são as alterações a fazer à última linha do código?

ActiveSheet.Shapes("Shape1").OnAction = "" ' para desligar nova execução desta macro

Já tentei alguns procedimentos, mas sem sucesso (aparece sempre mensagem de erro).

Obrigado pela sua valiosa ajuda.

Um abraço

Share this post


Link to post
Share on other sites
Nuno Teixeira

Já descobri o procedimento. Apenas tinha que apagar esta última linha:

ActiveSheet.Shapes("Shape1").OnAction = "" ' para desligar nova execução desta macro

Obrigado.

Share this post


Link to post
Share on other sites
FreiNando

É isso mesmo.

Só coloquei essa linha para evitar a repetição, visto o 2º shape ser desenhado numa posição fixa e qualquer outro novo shape ficaria sobreposto.

Por isso comentei essa linha de código, que está ligada à outra da primeira macro. Nomear os objectos traz a vantagem de os poder aceder quando bem entender.


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
Nuno Teixeira

Muito obrigado de qualquer forma, fiquei a conhecer códigos que não dominava e que serão bastante úteis no futuro. Tenho ainda algumas macros que não consegui operacionalizar por desconhecimento dos códigos necessários. Estou a tentar solucionar as questões lendo tutoriais e fazendo experiências. Se achar que não é abuso da minha parte, gostaria de lhe pedir ajuda em breve acerca de outros códigos.

Obrigado.

Um abraço

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.