Ir ao conteúdo

Posts recomendados

Postado

Boa Galerinha 😎

 

To tentando colocar um SE em um código, mas pelo que entendo ele tem que entrar depois de um FOR, e meus conhecimentos em vba são poucos, alguém consegue ajeitar ai pra mim?

 

tenho estas colunas

Citação

b             c               d

image.png.02eda6882fca8c64599c0b6e8033222c.png

 

e tenho este código

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Colunas As Range
Set Colunas = Range("A1:A17")

If Not Application.Intersect(Colunas, Range(Target.Address)) Is Nothing Then
linha = Target.Row
On Error Resume Next

      For i = 2 To 17
        Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "B").Value, Sheets("Plan2").[A1:B17], 2, 0)
    Next

End If
End Sub

e o que preciso é de um SE nessa parte

      For i = 2 To 17
        Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "B").Value, Sheets("Plan2").[A1:B17], 2, 0)
		Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "C").Value, Sheets("Plan3").[A1:B17], 2, 0)
		Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "D").Value, Sheets("Plan4").[A1:B17], 2, 0)
    Next

tipo, hora que o código estiver percorrendo a coluna B e a célula estiver vazia, pegar o valor da C e buscar na Plan3, se B e C estiver vazia pegar o valor de D e buscar na Plan4

 

😵 deu pra entender, ou ficou confusa minha explicação? 😂

  • Solução
Postado

@deejaywesley  Veja se este lhe atende.

 

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim i As Long
  If Not Intersect([A1:A17], Target) Is Nothing Then
   For i = 2 To 17
    If Cells(i, "B") <> "" Then
     Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "B").Value, Sheets("Plan2").[A1:B17], 2, 0)
    ElseIf Cells(i, "C") <> "" Then
     Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "C").Value, Sheets("Plan3").[A1:B17], 2, 0)
    Else: Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "D").Value, Sheets("Plan4").[A1:B17], 2, 0)
    End If
   Next i
  End If
End Sub

 

  • Curtir 1
Postado

Boa Noite  Amigo @OreiaG

 

os 2 primeiros estão rodando certo, mas esta dando erro nesta linha

Citação

Else: Cells(i, "F").Value = Application.WorksheetFunction.VLookup(Cells(i, "D").Value, Sheets("Plan4").[A1:B17], 2, 0)

 

Boa Noite Amigo @OreiaG

 

Resolvi o problema acrescentando essa linha ao seu código On Error Resume Next, neta parte:

Citação

For i = 2 To 17

On Error Resume Next

If Cells(i, "B") <> "" Then

Muito obrigado pela ajuda!

forte abraço!😎

Postado
8 horas atrás, deejaywesley disse:

os 2 primeiros estão rodando certo, mas esta dando erro nesta linha

 

Resolvi o problema acrescentando essa linha ao seu código On Error Resume Next,...

 

 

Eu suponho que o erro irá ocorrer se o seu VLookup não encontrar o valor procurado, então o erro poderá ocorrer também nas duas primeiras condições e não só na terceira. E o uso de On Error Resume Next poderá "permitir" resultado falso na coluna F.

 

Exemplo: considerando que o preenchimento de A1:D17 seja manual, e considerando que o intervalo F1:F17 está preenchido corretamente. Agora você altera o valor em B1 de 3 para 20 e altera qualquer valor em A1:A17.

Se o valor 20 não for encontrado, o VLookup irá retornar erro e o valor em F1 não será atualizado pelo código em decorrência do On Error Resume Next, ou seja, F1 terá um valor falso.

 

Talvez uma forma de contornar seja executar o código ao alterar qualquer coluna de A até D, e não somente ao alterar A, limpar antes o valor em F e assim em caso de erro F ficará vazia (ou pode colocar mensagem indicando que ocorreu erro).

 

Seria conveniente também que o código atualizasse F somente na linha alterada em A:D, ao invés de executar Loop em todas as linhas a cada alteração manual, conforme seu código original.

Postado

Boa tarde meu amigo @OreiaG

5 horas atrás, OreiaG disse:

 

Eu suponho que o erro irá ocorrer se o seu VLookup não encontrar o valor procurado, então o erro poderá ocorrer também nas duas primeiras condições e não só na terceira. E o uso de On Error Resume Next poderá "permitir" resultado falso na coluna F.

 

Exemplo: considerando que o preenchimento de A1:D17 seja manual, e considerando que o intervalo F1:F17 está preenchido corretamente. Agora você altera o valor em B1 de 3 para 20 e altera qualquer valor em A1:A17.

Se o valor 20 não for encontrado, o VLookup irá retornar erro e o valor em F1 não será atualizado pelo código em decorrência do On Error Resume Next, ou seja, F1 terá um valor falso.

 

Talvez uma forma de contornar seja executar o código ao alterar qualquer coluna de A até D, e não somente ao alterar A, limpar antes o valor em F e assim em caso de erro F ficará vazia (ou pode colocar mensagem indicando que ocorreu erro).

 

Seria conveniente também que o código atualizasse F somente na linha alterada em A:D, ao invés de executar Loop em todas as linhas a cada alteração manual, conforme seu código original.

Essa planilha aí é para gerar um arquivo m3u de playlist de música, aí no caso, cada aba dela aí puxa as musias referente a uma pasta, Universitária, sertanejo clássico, internacional, e esses números aí dessas colunas B e C e D, são os números da linha onde elas estão, ai fica sendo duas músicas Universitária, uma sertaneja clássica, mais duas universitárias... e a cada oito músicas toca uma Internacional e ainda vai ter mais opções, que eu ainda estou arrumando por exemplo: A cada 30 música vai rodar uma Country também para usar no evento, esses números da colunas B e C e D é os números das Linhas onde elas estão na nas abinhas, lá referente a cada pasta, ela faz essa mistura, esse procv  roda só uma vez, ele não é rodada toda vez que ela tem alteração não, ficou errado ali em cima, (como realmente é... Set Colunas = Range("A4:A4")  ), ele roda só uma vez só para puxar as musicas e gerar o m3u.

 

😂 mas ate agora ta funcionando, fazendo o que preciso e sem dar o erro, ta ótimo kkkk

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!