Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
Avatar do usuário
Por VictorRambo
Posts Avatar
#27591
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
Por babdallas
#27594
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
Avatar do usuário
Por wesleyribeiro123
Posts Avatar
#27600
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)
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord