Logo Hardware.com.br
Korgoth
Korgoth Novo Membro Registrado
18 Mensagens 1 Curtida

[Resolvido] Indice + Corresp pelo VBA (para tabela de icms)

#1 Por Korgoth 15/10/2015 - 10:05
Como eu poderia realizar este codigo atravez do VBA ? Estou completamente perdido nisso :l

=SEERRO(ÍNDICE(IICMS!$B$2:$AB$28;CORRESP(C4;IICMS!$A$2:$A$28;0);CORRESP(G4;IICMS!$B$1:$AB$1;0));"-&quot

Anexos

Walhart
Walhart Super Participante Registrado
185 Mensagens 65 Curtidas
#2 Por Walhart
15/10/2015 - 10:30
No VBA as fórmulas tem que ser em inglês.

SEERRO é IFERROR
ÍNDICE é INDEX
CORRESP é MATCH

mais traduções aqui http://guiadoexcel.com.br/traducao-das-formulas-excel-ingles-portugues
lembrando que no VBA, o que vc usa pra separar os argumentos das fórmulas é vírgula (,) e não ponto e vírgula como é no excel em português (wink.png

Outra coisa... pra usar fórmulas da planilha no VBA vc tem que usar o código WorksheetFunction

ou seja... se quiser que a célula A1 tenha o valor da soma de B1 e C1 fica assim:

Range("A1").Value = WorksheetFunction.Sum( Range("B1").Value , Range("C1").Value )
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#4 Por Basole
15/10/2015 - 12:24
@Korgoth não cheguei a fazer muitos teste portanto, veirif. se é isso mesmo (anexo)
A macro é executada ao alterar alguma linha da coluna "G"
Ps.: A macro esta no modulo, e o evento "Worksheet_Change" na aba [ consulta ] para "chamar" a macro.

Anexos

Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#6 Por Basole
15/10/2015 - 13:58
Isso esta acontecendo, pois acredito que voce esta colando por "atacado", ou seja varias celulas ao mesmo tempo, e o evento Worksheet_change
atualiza celula-por-por celula, porisso aparece o error.
Fiz umas alterações veja se lhe atende:
* Substitue na sua aba consulta o evento abaixo:

[code=vb]
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then Exit Sub
If Target.Column = 7 Then
If Range("C" & Target.Row).Value <> "" Then
'Atualiza_Consulta Target
Teste ' Chama a macro teste
Else
If Range("C" & Target.Row).Value = "" Or Range("G" & Target.Row).Value = "" Then Range("D" & Target.Row).Value = "-"
End If
End If
End Sub

Sub Teste()
Dim rng As Range
Dim i As Range
Dim LastRow As Long
LastRow = Sheets("Consulta").Range("G" & Rows.Count).End(xlUp).Row
Set rng = Sheets("Consulta").Range(Cells(4, "G"), Cells(LastRow, "G"))
For Each i In rng
Application.Goto i, True
Atualiza_Consulta i
Next
End Sub
[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#8 Por Basole
16/10/2015 - 09:30
Unica coisa estranha é q no momento que se roda a sub "teste" a planilha fica focada la pra baixo, mas isso não é problema algum, novamente muito

@Korgoth, para contornar isso, só voce acrescentar "Range("A1").activate" no final da rotina Teste, para selecionar a celula A1 no final da execucao.
Veja:
[code=vb]
Sub Teste()
Dim rng As Range
Dim i As Range
Dim LastRow AsLong
LastRow = Sheets("Consulta").Range("G" & Rows.Count).End(xlUp).Row
Set rng = Sheets("Consulta").Range(Cells(4, "G"), Cells(LastRow, "G"))
ForEach i In rng
Application.Goto i, True
Atualiza_Consulta i
Next
Sheets("Consulta").Range("A1").activate
End Sub
[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal