Logo Hardware.com.br
Playboy
Playboy Geek Registrado
3.4K Mensagens 46 Curtidas

[Resolvido] Ajuda com VBA - Application.WorksheetFunction.VLookup

#1 Por Playboy 04/11/2021 - 22:21
Boa noite a todos. Tenho intensificado meus estudos em Excel VBA. Mas, em um exemplo do curso que estou seguindo, uma rotina não funciona e não sei o porque. Gostaria da ajuda dos amigos. Em anexo a planilha e abaixo o código.

Sub todos_fabricantes()

Range("E3").Select

Do Until ActiveCell.Offset(0, -1) = ""

ActiveCell = Application.WorksheetFunction.VLookup(Cells(ActiveCell.Row, 2), Sheets("Config").Range("B:C"), 3, False)
ActiveCell.Offset(1, 0).Select

Loop
End Sub


Obrigado

Anexos

P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#2 Por P@tropi
05/11/2021 - 11:08
Bom dia, @Playboy

Não retorna os dados porque você pediu para retornar dados da coluna 3.
A coluna B onde estão os dados procurados é a 1 e a coluna C de onde os dados são retornados é a 2
Basta substituir o 3 pelo 2, conforme em vermelho na linha do código abaixo:

ActiveCell = Application.WorksheetFunction.VLookup(Cells(ActiveCell.Row, 2), Sheets("Config").Range("B:C"), 2, False)

Só um comentário, esse teu código usa o Select, sendo que devemos evitar o uso, pois torna os códigos mais lentos e pesados.

Segue abaixo uma opção sem Select e sem WorksheetFuntion (que nesse caso não é necessário).


Sub todos_fabricantes()
Dim c As Range
For Each c In Range("E3:E" & Cells(Rows.Count, 4).End(xlUp).Row)
c.Value = Application.VLookup(c.Offset(0, -3), Sheets("Config&quot.Range("B:C&quot, 2, False)
Next c
End Sub



[]s
Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
Playboy
Playboy Geek Registrado
3.4K Mensagens 46 Curtidas
#3 Por Playboy
22/11/2021 - 23:32
P@tropi disse:
Bom dia, @Playboy

Não retorna os dados porque você pediu para retornar dados da coluna 3.
A coluna B onde estão os dados procurados é a 1 e a coluna C de onde os dados são retornados é a 2
Basta substituir o 3 pelo 2, conforme em vermelho na linha do código abaixo:

ActiveCell = Application.WorksheetFunction.VLookup(Cells(ActiveCell.Row, 2), Sheets("Config").Range("B:C"), 2, False)

Só um comentário, esse teu código usa o Select, sendo que devemos evitar o uso, pois torna os códigos mais lentos e pesados.

Segue abaixo uma opção sem Select e sem WorksheetFuntion (que nesse caso não é necessário).


Sub todos_fabricantes()
Dim c As Range
For Each c In Range("E3:E" & Cells(Rows.Count, 4).End(xlUp).Row)
c.Value = Application.VLookup(c.Offset(0, -3), Sheets("Config&quot.Range("B:C&quot, 2, False)
Next c
End Sub



[]s




Obrigado @patropi. Entendi... valeu mesmo...
Playboy cap_chateado.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal