Página 1 de 1

DIFERENCIAR NOME XXXX DE XXXXY

Enviado: 19 Out 2017 às 21:09
por VictorRambo
Boa noite.
Tenho um botão para fazer a varredura da planilha pra ele buscar um MODELO de produto. O problema é que ele não diferencia um modelo que é XXXX de um modelo XXXXY e ele sempre retorna os dados do modelo XXXX que é o primeiro da planilha.

Como faço para ele ler cada elemento do MODELO e diferenciar um algarismo diferente?

Segue o Código.

Private Sub btnBuscar_Click()
Dim EmpFound As Range

With Range("Coluna_Modelo")

Set EmpFound = .Find(Me.txtModelo3.Value)

If EmpFound Is Nothing Then

MsgBox "Modelo não encontrado", vbCritical, "Movimak - Search Tool"

Me.txtModelo3.Value = ""

Else

With Range(EmpFound.Address)

Me.cbxEquipamento3 = .Offset(0, 1)
Me.txtCompLanca2 = .Offset(0, 2)
Me.txtLargGarfo2 = .Offset(0, 3)
Me.txtElevacaoGarfo2 = .Offset(0, 4)
Me.txtCorredor2 = .Offset(0, 5)
Me.cbxOpera2 = .Offset(0, 6)
Me.cbxTracao2 = .Offset(0, 7)
Me.cbxElevacao2 = .Offset(0, 8)
Me.cbxTensao2 = .Offset(0, 9)
Me.txtCargaMax2 = .Offset(0, 10)
Me.cbxFuncao3 = .Offset(0, 11)
Me.cbxAcabamento3 = .Offset(0, 12)
Me.cbxMRoda2 = .Offset(0, 13)
Me.cbxTRoda2 = .Offset(0, 14)
Me.cbxAlimentacao2 = .Offset(0, 15)
Me.txtGarantia2 = .Offset(0, 16)
Me.txtDescricaoFiname2 = .Offset(0, 17)
Me.txtCodFiname2 = .Offset(0, 18)
Me.txtObs2 = .Offset(0, 19)
Me.xbxAbrasivo3 = .Offset(0, 20)
Me.xbxIrregular3 = .Offset(0, 21)
Me.xbxLiso3 = .Offset(0, 22)
Me.xbxLisoSensivel3 = .Offset(0, 23)
Me.xbxPintado3 = .Offset(0, 24)
Me.xbxUsinado3 = .Offset(0, 25)
Me.xbxLeve3 = .Offset(0, 26)
Me.xbxModerado3 = .Offset(0, 27)
Me.xbxIntenso3 = .Offset(0, 28)

On Error GoTo 0

End With
End If
End With
Set EmpFound = Nothing

End Sub

Re: DIFERENCIAR NOME XXXX DE XXXXY

Enviado: 19 Out 2017 às 21:36
por babdallas
Eu usaria a função corresp para encontrar a correspondência exata. Segue uma proposta e modificação do seu código. Como você não anexou a planilha, não testei.
Código: Selecionar todos
Private Sub btnBuscar_Click()
    Dim lngLinhaEncontrada      As Long

    
On Error GoTo Tratar_Corresp
    'Coloque no lugar de plan1 o nome da planilha onde está o intervalo "Coluna_Modelo"
    
    lngLinhaEncontrada = Application.WorksheetFunction.Match(Me.txtModelo3.Value, _
                            plan1.Range("Coluna_Modelo"), 0)
    

    With plan1.Cells(lngLinhaEncontrada, plan1.Range("Coluna_Modelo").Column)
                                                    
        Me.cbxEquipamento3 = .Offset(0, 1)
        Me.txtCompLanca2 = .Offset(0, 2)
        Me.txtLargGarfo2 = .Offset(0, 3)
        Me.txtElevacaoGarfo2 = .Offset(0, 4)
        Me.txtCorredor2 = .Offset(0, 5)
        Me.cbxOpera2 = .Offset(0, 6)
        Me.cbxTracao2 = .Offset(0, 7)
        Me.cbxElevacao2 = .Offset(0, 8)
        Me.cbxTensao2 = .Offset(0, 9)
        Me.txtCargaMax2 = .Offset(0, 10)
        Me.cbxFuncao3 = .Offset(0, 11)
        Me.cbxAcabamento3 = .Offset(0, 12)
        Me.cbxMRoda2 = .Offset(0, 13)
        Me.cbxTRoda2 = .Offset(0, 14)
        Me.cbxAlimentacao2 = .Offset(0, 15)
        Me.txtGarantia2 = .Offset(0, 16)
        Me.txtDescricaoFiname2 = .Offset(0, 17)
        Me.txtCodFiname2 = .Offset(0, 18)
        Me.txtObs2 = .Offset(0, 19)
        Me.xbxAbrasivo3 = .Offset(0, 20)
        Me.xbxIrregular3 = .Offset(0, 21)
        Me.xbxLiso3 = .Offset(0, 22)
        Me.xbxLisoSensivel3 = .Offset(0, 23)
        Me.xbxPintado3 = .Offset(0, 24)
        Me.xbxUsinado3 = .Offset(0, 25)
        Me.xbxLeve3 = .Offset(0, 26)
        Me.xbxModerado3 = .Offset(0, 27)
        Me.xbxIntenso3 = .Offset(0, 28)
    
    End With
    
    Exit Sub

Tratar_Corresp:
    MsgBox "Modelo não encontrado", vbCritical, "Movimak - Search Tool"
    Me.txtModelo3.Value = ""

End Sub

DIFERENCIAR NOME XXXX DE XXXXY

Enviado: 20 Out 2017 às 09:13
por wesleyribeiro123
Victor
Bom dia,

Brother, caso deseje usar o teu código apenas complemente o método .Find.
Observe que o são te solicitados o What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, a instrução LookAt vc deve definir se será xlWhole ou xlPart, como padrão quando não definida ele busca a última utilizada, e se por vc nunca alterou por padrão o sistema vem com xlPart, ou seja, ele busca por parte da correspondência e não pelo o texto exato, declare o LookAt como xlWhole e ele lhe retornará apenas o nome exato que deseja.
Veja exemplo:
Código: Selecionar todos
Set Intervalo = .Find(What:=EncontraString, _
                            After:=.Cells(1), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False)