Notifications
Clear all

Ativar o VBA

9 Posts
2 Usuários
0 Reactions
2,920 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal que sempre me ajuda aqui do Planilhando, venho aqui mais uma vez com uma duvida. O que vocês fazem para que um codigo em vba seja executado automaticamente sem ser por meios de nenhum executador (botão ou outra coisa)? Tipo tenho um programa que estou fazendo teste só para estudos da facul e ainda não cheguei nessa parte.

Vou mandar um código de teste para vocês olharem:

Sub teste()

    Dim celula As String
    If Range("A1") = 2 Then
        Range("A2") = "verdade"
        Range("A3") = ""
    Else
        Range("A3") = "False"
        Range("A2") = ""
    End If
End Sub

O que tem que ser adicionado nesse código para que ele seja executado automaticamente com a planilha?

 
Postado : 20/10/2012 5:44 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!

Use o evento...Worksheet.Change Event
http://msdn.microsoft.com/en-us/library ... 39775.aspx

Att

 
Postado : 20/10/2012 5:47 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

cirogut,

Boa Noite!

Apenas complementando a informação do colega alexandrevba...
1 - Abra a IDE do VBA (De dentro do Excel, utilize a combinação de atalho ALT + F11)
2 - Na IDE do VBA, janela VBAProject (a janela da esquerda da sua tela) dê um clique duplo no ítem Plan1(Plan1), se essa for a planilha que você quer executar o código automaticamente. Isso fará abrir a janela de código do lado direito da sua tela.
3 - A janela de código à direita, possui duas caixas combos na parte superior (Geral e Declaração). No combo da esquerda (Geral) selecione o objeto Worksheet. Isso faraá o VBA abrir duas linhas de código no lado direito:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

4 - Cole seu código, sem as linhas Sub teste() e End Sub entre as linhas que surgiram.
5 - Salve tudo e feche a IDE do VBA.

O código total deve ficar assim:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.EnableEvents = False
    Dim celula As String
    If Range("A1") = 2 Then
        Range("A2") = "verdade"
        Range("A3") = ""
    Else
        Range("A3") = "False"
        Range("A2") = ""
    End If
    Application.EnableEvents = True
End Sub
 
Postado : 20/10/2012 6:35 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Wagner seu código me ajudou muito só que eu fiz uma modificação nele para que quando alguma célula esteja escrito alguma coisa que vai ser verificada no codigo para que apresente outro texto em outra célula. Mas quando digito algo em uma célula e aparece a caixa de texto inputbox, logo depois que fecho essa caixa ela aparece novamente.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("A1") = "URGENTE" Then
        Range("A2") = InputBox("Digite o nome do responsavél do retrabalho")
    End If
        

End Sub

Ele fica como se estivesse em loop. Como fazer com que quando eu apertar Ctrl+V, a caixa do inputbox aparecer somente uma vez!

 
Postado : 20/10/2012 7:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!

Tente algo como...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("$A$1")) Is Nothing Then
    Exit Sub
          
    Else
    Range("A2") = InputBox("Digite o nome do responsavél do retrabalho")
    
    End If
        
End Sub
 
Postado : 20/10/2012 7:34 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

cirogut,

Você também pode colocar seu código no evento Chane da Worksheet (ao invés do evento SelectionChange, como está). Use assim:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.EnableEvents = False
        If Range("A1") = "URGENTE" Then
            Range("A2") = InputBox("Digite o nome do responsavél do retrabalho")
        End If
        Application.EnableEvents = True
    End Sub
 
Postado : 20/10/2012 8:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

alexandrevba, o código é esse mesmo. Só que quando eu clico na célula que é verificada, sempre abre o inputbox. Não teria como só abrir o inputbox se na célula que está sendo verificada contenha o texto "URGENTE", se não, mesmo que eu clique nela não apareça a caixa. Pensei em colocar o Else mais parece que já foi usado com um comando. Teria como?

Wagner valeu pela ajuda!!! Aprendendo de formas diferentes. :D

 
Postado : 21/10/2012 7:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ciro, não sei se entendi corretamente, fiquei confuso, umavez que diz que as duas rotinas é o que pretende, mas elas executam ações diferentes.

A que o Wagner postou, ao clicar em qq celula é feita a verificação do Valor em "A1", e a que o Alexandre indicou, a rotina só prosseguira se a Celula "A1" for clicada.
Então me baseando pelo seu ultimo post onde diz ao Alexandre que é isto mesmo que queria, fiz uma outra adaptação, veja se seria isto:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim sValue As String
    
    If Intersect(Target, Range("$A$1")) Is Nothing Then
    
        Exit Sub
          
    Else
    
        sValue = Range("$A$1").Value
    
        If sValue <> "URGENTE" Then
            Exit Sub
        
        Else
        
            Range("A2") = InputBox("Digite o nome do responsavél do retrabalho")
        
        End If
        
    End If
    
End Sub

[]s

 
Postado : 22/10/2012 6:57 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Era isso mesmo Mauro valeu. Agradeço também os usuários Alexandre e Wagner pelo ajuda.

 
Postado : 22/10/2012 9:49 pm