Nuno Teixeira Posted October 1, 2013 at 03:42 PM Report #527026 Posted October 1, 2013 at 03:42 PM 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
FreiNando Posted October 2, 2013 at 09:25 PM Report #527325 Posted October 2, 2013 at 09:25 PM 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
Nuno Teixeira Posted October 3, 2013 at 01:38 PM Author Report #527418 Posted October 3, 2013 at 01:38 PM 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
Nuno Teixeira Posted October 3, 2013 at 03:03 PM Author Report #527449 Posted October 3, 2013 at 03:03 PM Já descobri o procedimento. Apenas tinha que apagar esta última linha: ActiveSheet.Shapes("Shape1").OnAction = "" ' para desligar nova execução desta macro Obrigado.
FreiNando Posted October 3, 2013 at 07:58 PM Report #527528 Posted October 3, 2013 at 07:58 PM É 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
Nuno Teixeira Posted October 4, 2013 at 03:31 PM Author Report #527644 Posted October 4, 2013 at 03:31 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now