Notifications
Clear all

AJUDA! Macro (run if valor "x" = "y") - ERROS

3 Posts
2 Usuários
0 Reactions
926 Visualizações
(@gabach)
Posts: 0
New Member
Topic starter
 

Pessoal, sou nova com Macros e entendo zero sobre programação mas vou me virando como posso. Cheguei num ponto onde já busquei em todos os tópicos de ajuda em Excel tanto em português quanto em inglês e ainda não consegui resolver meu problema, portanto me registrei aqui em busca de ajuda específica.

Estou montando um planilha que será um formulário, onde um botão deve ativar uma macro que seja condicional. A ideia é que os valores de uma determinada célula determinem qual macro deve ser rodada. Para isso fiz 4 macros (4 módulos dentro do mesmo workbook), A, B, C e X, onde X é a tal macro "condicional" que deve ativar as outras, dependendo de qual for o Valor da Célula A1. Segue o código da Macro X:
__________________________________
Sub Conditional()

If Range("A1").Value = "A" Then
Run ("A")

ElseIf Range("A1").Value = "B" Then
Run ("B")

ElseIf Range("A1").Value = "C" Then
Run ("C")
End If

End Sub
_________________________________________

Demorei muito pra chegar num código que sequer funcionasse e fosse possível de atrelar a um botão (muitos fóruns me davam uma opção de um código "Private Sub Worksheet_Change(ByVal Target As Range)" mas eu não conseguia atrelar isso a um botão porque não aparecia na lista de macros disponíveis). Agora que finalmente o código X que fiz acima funciona, quando eu clico nele me mostra a mensagem "Não é possível executar a macro 'A'. Talvez ela não esteja disponível nesta pasta de trabalho ou todas as macros estejam desabilitadas". Isso acontece com todas as Macros (A, B e C) que fiz, e quando eu mudo o valor na célula A1 ele realmente atrela à Macro certa porém não a roda.

O caso é que quando eu atrelo a macro "A" a um certo botão ela funciona normalmente. Mas eu não queria que existissem três botões diferentes pra cada macro...queria um botão que ativasse a macro certa dependendo do valor na célula.
Tentei corrigir esse erro de todos os jeitos, já fui nas configurações do Excel e habilitei todas as macros conforme indicado quando pesquiso sobre esse erro, porém ele continua aparecendo.

Alguém pode dar uma luz??

Obrigada!

 
Postado : 13/08/2015 12:27 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

gabach, pelo que entendi temos :

1 ) Macro :- condicional - que ira chamar uma das macros A - B ou C dependendo do valor em A1

Se for isto a sua rotina está correta, e não precisa ter 4 Modulos, copie todas as rotinas para um Modulo só e delete os outros, outra coisa que tem de observar, como não colocou as macros A - B e C é ter a certeza que não estão como Private, apesar que isto não geraria tal erro "Private Sub A()" o ideal é estar "Sub A()".

Outra coisa, que tipo de Botão está utilizando ? Se for de Formulário terá a opção de Atribuir Macro, se for Controle ActiveX não tem esta opção, tem de clicar com o botão direito no botão e selecionar a opção Exibir Código e fazer a chamada a rotina condicional, ficando assim :

Private Sub CommandButton1_Click()
    Call Conditional
End Sub

Faça um teste, crie um arquivo novo, crie um Modulo, cole as rotinas abaixo, adicione o botão e associe a macro e veja se é isto.

Sub Conditional()

    If Range("A1").Value = "A" Then
        Run ("A") 'poderia usar tambem Call A em vez de Run
    
    ElseIf Range("A1").Value = "B" Then
        Run ("B") 'poderia usar tambem Call B em vez de Run
    
    ElseIf Range("A1").Value = "C" Then
        Run ("C") 'poderia usar tambem Call C em vez de Run
    End If

End Sub

Sub A()
    MsgBox "Macro A"
End Sub

Sub B()
    MsgBox "Macro B"
End Sub

Sub C()
    MsgBox "Macro C"
End Sub

Se ainda não funcionar, o ideal é anexar seu arquivo para analisar melhor.

[]s

 
Postado : 13/08/2015 12:58 pm
(@gabach)
Posts: 0
New Member
Topic starter
 

Muito Obrigada Mauro!!!!

Funcionou! Aparentemente eu estava adicionando muita complexidade pra uma coisa simples. Coloquei todos em um mesmo módulo e simplifiquei as nomenclaturas...

Difícil ser iniciante :D Está funcionando direitinho, valeu mesmo!

 
Postado : 13/08/2015 2:50 pm