Ir ao conteúdo
  • Cadastre-se

"Ativar" a programação


Posts recomendados

Bom dia!

Começo pedindo desculpas a minha ignorância em VBA, pois estou com um problema que parece ser de solução básica na qual já pesquisei em outros tópicos e fóruns e não achei a resposta que eu consiga aplicar (ao menos com o meu conhecimento técnico limitado).

 

O problema é o seguinte:

Tenho uma programação em VBA dentro de uma  planilha Excel v.2010 (no meu caso Plan4), que esconde e mostra as linhas conforme o valor da célula C112.

O problema é que o valor da célula C112 é alterado via fórmula, e ele não "ativa" a programação, sendo necessário eu clicar na célula C112 e dar "Enter" na barra de fórmulas para esconder e mostrar as linhas perfeitamente.

Lendo em outros tópicos, cheguei a ler sobre utilizar o evento "Calculate" e o "Intersect", mas não consegui aplicar com sucesso os comandos.

Pensei em executar uma operação com o valor da célula C112 para forçar a leitura do valor, mas o valor da célula é um código com letras e números.

 

Segue a minha programação:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("C112") <> 0 Then
Dim i As Integer
For i = 254 To 285
If Range("D" & i).EntireRow.Hidden = False Then
If Range("D" & i).Value = 0 Then
Rows(i & ":" & i).Select
Selection.EntireRow.Hidden = True
End If
End If
If Range("D" & i).EntireRow.Hidden = True Then
If Range("D" & i).Value <> 0 Then
Rows(i & ":" & i).Select
Selection.EntireRow.Hidden = False
End If
End If
Next i
Else
Dim x As Integer
For x = 254 To 285
If Range("D" & x).EntireRow.Hidden = False Then
Rows(x & ":" & x).Select
Selection.EntireRow.Hidden = True
End If
If Range("D" & x).EntireRow.Hidden = True Then
Rows(x & ":" & x).Select
Selection.EntireRow.Hidden = True
End If
Next x
End If
End Sub

 

Alguma ajuda?

Muito obrigado.

Link para o comentário
Compartilhar em outros sites

Assim

 

 

Private Sub Worksheet_Calculate()

If Range("C112") <> 0 Then
Dim i As Integer
For i = 254 To 285
If Range("D" & i).EntireRow.Hidden = False Then
If Range("D" & i).Value = 0 Then
Rows(i & ":" & i).Select
Selection.EntireRow.Hidden = True
End If
End If
If Range("D" & i).EntireRow.Hidden = True Then
If Range("D" & i).Value <> 0 Then
Rows(i & ":" & i).Select
Selection.EntireRow.Hidden = False
End If
End If
Next i
Else
Dim x As Integer
For x = 254 To 285
If Range("D" & x).EntireRow.Hidden = False Then
Rows(x & ":" & x).Select
Selection.EntireRow.Hidden = True
End If
If Range("D" & x).EntireRow.Hidden = True Then
Rows(x & ":" & x).Select
Selection.EntireRow.Hidden = True
End If
Next x
End If

End Sub

 

 

Ou seja troque o evento change para calculate.

 

 

 

 

 

 

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Agradeço sua ajuda, mas continua não funcionando, passa a dar erro em outra linha...

Segue a imagem:

Erro VBA.JPG

adicionado 2 minutos depois

Lembrando que o valor da célula C112 e da C113 na planilha do Excel é do tipo: "A B     1234", ou seja, não é número. Tem letras e números junto com espaços, é um código.

Link para o comentário
Compartilhar em outros sites

Segue uma versão mais simples, mas com o mesmo problema.
Na guia "O que almejo" está o desejado e algumas observações pertinentes.

Algo que eu achei estranho ao confeccionar este exemplo, é que caso a seleção dos dados da Planilha Inserir estejam na mesma planilha do código do contrato e das linhas a ocultar/mostrar, a programação funciona perfeitamente sem ter de dar Enter na célula C2, só que para o meu programa oficial não pode ser esta condição.

V6 para Clube do Hardware.rar

Link para o comentário
Compartilhar em outros sites

Desculpe novamente o meu desconhecimento, mas não entendi o que o teu exemplo tem a ver com a minha planilha...
O teu exemplo abre uma MsgBox toda vez que é alterado o valor na Plan2 (ou seja, que é "calculada"). Mas no meu exemplo que enviei, não funciona, pode testar...

Quanto a colocar o contrato diretamente no Excel, o que você quis dizer com isso? Eu adicionei o Word como objeto, haja visto que o original tem várias configurações de caráter estético e o Word permite melhor essa configuração.
Como seria a outra opção (ideia)?

Link para o comentário
Compartilhar em outros sites

Pois é  eu coloquei uma msgbox apenas para mostrar que o codigo funciona.

 

Eu nao consigo testar seu codigo, justamente por falta do contrato.

 

Qto a colocar o contrato no Excel seria digitar o contrato em uma planilha do excel mesmo.

 

Qto a outra opção seria interessante, ja que você ja tem um botao colocar o codigo que nao funciona da forma que esta dentro do seu botao.

 

Passe o codigo para uma sub que vai rodar tudo junto.

 

 

Veja no arquivo

 

 

 

 

V6 para Clube do Hardware.zip

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!