Ir para conteúdo
Fórum Script Brasil
  • 0

CORRESP pelo VBA


Michelle Alves

Pergunta

Oi gente,

estou quebrando a cabeça com um problema que me parecia simples....

Na teoria eu digitaria um código no TEXTBOX1, teoricamente ele buscaria o código na minha planilha "BDCQE", e o correspondente desse código seria exibido na TEXTBOX2 e no TEXTBOX3. Alguém sabe como devo proceder ?

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

bom michelle, pra procurar o texto você faria assim ó:

Dim r As Range

    Set r = Sheets("Plan1").Cells.Find(What:=TextBox1.Text, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
    If Not r Is Nothing Then
        r.Activate 'Achou
    Else
        MsgBox "Não achou."
    End If[/code]

o r retorna a celula onde ta o codigo e ai você tem q ver como encontrar o texto correspondente em relacao ao codigo.

exemplo, se o texto correspondente tiver na coluna da frente, é so você pegar o texto da coluna da frente e por no TextBox2

Link para o comentário
Compartilhar em outros sites

  • 0

Agora fiquei confusa....

Mas vamos lá, tentei rodar seu código e deu erro no método Activate, ele falhou.

Além disso, a idéia, Kuroi é digitar um código no TEXTBOX5, ai ele procura o CORRESPONDENTE na minha planilha e retorna no TEXTBOX6. Posso estar enganada, mas no teu código, ele retornaria o CORRESP no TEXTBOX5, não é ?

Link para o comentário
Compartilhar em outros sites

  • 0

na verdade o codigo era so de exemplo, você teria q adaptar de acordo com o q você quer.

mas na verdade encontrei aqui a funcao Match(), ela faz exatamente o q o Corresp() faz. a sintaxe seria essa:

valor = WorksheetFunction.Match(codigo, Range("XX:YY"), 0)

veja ai se não funciona.

Link para o comentário
Compartilhar em outros sites

  • 0

Então,

Eu inclusive já havia tentando usar MATCH anteriormente, mas não tava conseguindo, por isso busque ajuda no fórum. Porém, o erro avisa que consegue obter a propriedade MATCH da classe WorksheetFunction. Mas já até procurei a propriedade tá na lista da WorksheetFunction.

Posto abaixo a forma como tentei:

Private Sub TextBox5_Change()

'O TEXTBOX5 É ONDE EU IREI DIGITAR O CÓDIGO

TextBox5 = WorksheetFunction.Match(TextBox6, Sheets("BDCQE").Range("B2:B500"), 1)

'TEXTBOX6 SERÁ O CORRESPONDENTE

'O CORRESPONDENTE DEVE SER PROCURADO NA PLANILHA BDCQE, DA CÉLULA B2 ATÉ A B500

Link para o comentário
Compartilhar em outros sites

  • 0

acho q deveria ser o contrario não??

devia ser assim:

TextBox6.Text = WorksheetFunction.Match(TextBox5.Text, Sheets("BDCQE").Range("B2:B500"), 1)

mas qual a mensagem de erro q ta aparecendo?? acho q o problema ta no range. existe valor mesmo ate a linha 500?? se por exemplo, você so tem valor ate a linha 80, o range não pode passar da 80 q da erro.

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa...como isso tá dando trabalho....

Então, olha só, do seu jeito. Colocando assim:

Private Sub TextBox6_Change()

TextBox6.Text = WorksheetFunction.Match(TextBox5.Text, Sheets("BDCQE").Range("B2:B50"), 1)

End Sub

Ele não puxa nada, até porque não houve mudança no TEXTBOX6, mas colocando o evento Change no TEXTBOX5 dá aquele mesmo erro falando da classe Worksheet Function com a propriedade MATCH, e olha que já tentei colocar o Range até onde eu tiver valor.

Link para o comentário
Compartilhar em outros sites

  • 0

então michelle, mas é pra por isso no change do textbox5. da uma olhada no primero parametro, o q você quer procurar é o q ele tiver digitando não?? então se você poe no change do textbox6, ele vai chamar quando você digitar no textbox6 certo?? mas ai ele ta digitando no 6, mas você ta procurando o texto q ta escrito no 5.

e se o textbox5 estiver em branco vai dar esse erro, eu mesmo testei aqui. e ele tb tava dando o erro pra mim caso eu passe o range de onde tem valor. então tenta assim ó:

Private Sub TextBox5_Change()
TextBox6.Text = WorksheetFunction.Match(TextBox5.Text, Sheets("BDCQE").Range("B2:B50"), 1)
End Sub[/code]

exatamente como ta ai, e ai veja, se continuar dando erro então tenta mudar o range pra so ate onde tem valor.

entretanto tb to tendo uns erros com o match() caso eu digite um valor menor do q o da primera linha, so consegui corrigir com o on error.

de qualquer modo, olha aqui uma planilha com o codigo todo funcionando, de uma olhada como eu fiz e ai você pode adaptar na sua planilha. rode o userform e digite o texto no textbox de cima:

match.rar

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi... esse problema tá me deixando doida... e estou te dando um trabalhão ainda....

O teu exemplo, se não estiver doida, puxa qual a linha está o valor digitado no TEXT. No meu caso é diferente:

Controle NomeDoProduto CodigoDoProduto Valor

2 ESTABILIZADOR 100 R$ 48,32

3 MOUSE 200 R$ 19,16

4 TECLADO LG 300 R$ 64,33

5 CD R - MAXELL 400 R$ 1,50

Vou digitar no TEXTBOX5 um código. Por exemplo: 200. Ai ele tem que retornar o nome do 200 no TEXTBOX6, que seria MOUSE. Entendeu ?

Para facilitar ainda mais estou postando um exemplo do meu arquivo.

http://www.4shared.com/account/file/907295...este_kuroi.html

Link para o comentário
Compartilhar em outros sites

  • 0

exatamente, o corresp vai retornar a linha, mas sabendo a linha é so você mover pra posicao onde ta.

mas esquece esse corresp q ta complicando mesmo.

usa aquele meu primero codigo, dei uma modificada aqui nele e funcionou na sua planilha, olha ai:

Private Sub TextBox5_Change()
    Dim r As Range
        
    If Not IsNumeric(TextBox5.Text) Then
        TextBox6.Text = ""
        Exit Sub
    End If
    
    Set r = Sheets("BDCQE").Range("C2:C65").Find(What:=Val(TextBox5.Text), After:=Range("C2"), LookIn:=xlValues, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
    
    If Not r Is Nothing Then
        TextBox6.Text = Range("B" & r.Row).Text
    Else
        TextBox6.Text = ""
    End If
End Sub[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

é verdade, é q tem uns ranges em q não ta especificada as planilha ai no codigo. ai ele entende q é da planilha ativa.

é so você por especificar a planilha pra todos os ranges.

onde ta After:=Range("C2") troque por After:=Sheets("BDCQE").Range("C2")

e onde ta TextBox6.Text = Range("B" & r.Row).Text troque por TextBox6.Text = Sheets("BDCQE").Range("B" & r.Row).Text

Link para o comentário
Compartilhar em outros sites

  • 0

Legal Kuroi, muitíssimo obrigada !!!

Um amigo me ensinou outra forma, vou postar aqui também para ajudar nas futuras pesquisas. O problema dela é o mesmo, a questão da planilha ativa, e essa eu até tentei fazer como você me ensinou, mas não consegui. Se você souber como fazer para que essa não tenha a necessidade de deixar a planilha ativa vai ser de grande utilidade.

Sub Procurar()

Dim ValorProcurado As String

Dim Banco As Range

Dim Resultado As Range

Set Banco = ThisWorkbook.Sheets("BDCQE").Range("A2:D500")

ValorProcurado = Me.TextBox5.Value

Set Resultado = Banco.Find(ValorProcurado)

Resultado.Worksheet.Activate

Me.TextBox6.Value = Resultado.Offset(0, -1)

Me.TextBox8.Value = Format(Resultado.Offset(0, 1), "R$ 0.00")

Set Resultado = Nothing

Set Banco = Nothing

End Sub

Public Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

Call Procurar

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

michelle, da uma olhada nessa parte do codigo:

Resultado.Worksheet.Activate

isso ai vai ativar a planilha BDCQE sempre q a funcao for chamada. e se você tirar essa linha ela vai para de funcionar.

no fundo, essa funcao ai faz a mesma coisa da q eu passei, com a unica diferenca de q essa dai vai mover o cursor pra celula encontrada (o q vai forcar a mudar de planilha), enquanto q a minha captura o texto sem mover o cursor, e tb q eu pus uns detalhes a mais pra garantir q não ocorram erros.

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi primeiramente muito obrigada por toda ajuda, você foi um salvador.

Do modo como você colocou eu já havia tentando, e ele levaria para a planilha ativa toda vez que a macro rodasse. Consegui de uma outra forma, e posto no site:

' RETORNA OS DADOS DO PRODUTO AO DIGITAR O CÓDIGO

Sub Procurar()

Dim ValorProcurado As String

Dim Banco As Range

Dim Resultado As Range

Set Banco = Sheets("BD").Range("A2:D500")

ValorProcurado = Me.TextBox5.Value

Sheets("BD").Activate

Set Resultado = Banco.Find(ValorProcurado)

Resultado.Activate

Me.TextBox6.Value = Resultado.Offset(0, -1)

Me.TextBox8.Value = Format(Resultado.Offset(0, 1), "R$ 0.00")

Sheets("Plan1").Activate

Set Resultado = Nothing

Set Banco = Nothing

End Sub

' FAZ A LIGAÇÃO COM O RETORNO DO CÓDIGO

Public Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

Call Procurar

End Sub

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...