Metodo find en excel vb me regresa error cuando no encuentra concidencia o hay error de dedo.

Tengo una bd donde con un textbox solicito que me busque en la columna a1 un codigo pero al no tener ese codigo en la bd o si me equivoco al teclear el codigo se va a error 91 y me pide depurar les mando la parte que no esta trabajando bien. Gracias

Private Sub Fregresos_Click()

End Sub

Private Sub Label1_Click()

End Sub
'primero busca en base datos y sube la informacion a la interfaz
Private Sub txtcodigo_Change()
Application.ScreenUpdating = False
Sheets("Bd").Activate
Range("a1").Select
cliente_existente = Cells.Find(what:=Txtcodigo, after:=ActiveCell, LookIn:=xlValues, _
Lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, _
MatchCase:=True).Activate
'Verifica si el cliente ya existe
If cliente_existente = True Then
Txtdescripcion = ActiveCell.Offset(0, 1).Value
Txtexistencia.Value = ActiveCell.Offset(0, 2).Value

End If
Application.ScreenUpdating = True
End Sub

2 Respuestas

Respuesta
1

Te anexo la macro con la actualización, si el dato que pones no existe, ya no te envía error.

Private Sub txtcodigo_Change()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    Sheets("Bd").Activate
    Set b = Cells.Find(what:=txtcodigo, after:=ActiveCell, LookIn:=xlValues, _
            Lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, _
            MatchCase:=True)
    'Verifica si el cliente ya existe
    If Not b Is Nothing Then
        Txtdescripcion = b.Offset(0, 1).Value
        Txtexistencia.Value = b.Offset(0, 2).Value
    End If
    Application.ScreenUpdating = True
End Sub

Te recomiendo que utilices la columna en la que vas a buscar, en esta parte del código 

Set b = Cells.Find(what:=txtcodigo

Le estás diciendo que busque en "Cells", es decir, en todas las celdas, sería más eficiente si le dices en qué columna se encuentra el código, por ejemplo, si el código está en la columna "A":

Private Sub txtcodigo_Change()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    Sheets("Bd").Select
    Set b = Columns("A").Find(txtcodigo, Lookat:=xlPart)
    'Verifica si el cliente ya existe
    If Not b Is Nothing Then
        Txtdescripcion = b.Offset(0, 1).Value
        Txtexistencia.Value = b.Offset(0, 2).Value
    End If
    Application.ScreenUpdating = True
End Sub

Saludos.Dante Amor

Buenos días le agradezco su interés el código trabaja muy bien, mil gracias, hasta luego

Hola que tal recién me ayudo co el código de mi proyecto, lo puse a trabajar pero no me di cuenta que ya no me actualiza mi base de datos de la manera como estaba me actalizaba la columna c según la celda de A que quedaba activada por ejemplo: 123456 sensor económico 9 2.2 3 00005 mz12 donde 123456 es código, sensor económico es descripción, 9 es stock actual esta es la parte de mi "bd" que me actualiza al usar mi userform le mando el código completo de mi userform que es para registrar salidas de almacen y actualizar las existencias este es todo el código de mi userform 2, como puedo subir el archivo

Private Sub Fregresos_Click()

End Sub

Private Sub Label1_Click()

End Sub

Private Sub Txtcodigo_Change()
Application.ScreenUpdating = False
Sheets("Bd").Activate
Range("a1").Select

cliente_existente = Columns("a").Find(what:=Txtcodigo, after:=ActiveCell, LookIn:=xlValues, _
Lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, _
MatchCase:=True).Activate
'Verifica si el cliente ya existe
If cliente_existente = True Then
Txtdescripcion = ActiveCell.Offset(0, 1).Value
Txtexistencia = ActiveCell.Offset(0, 2).Value
End If
Application.ScreenUpdating = True
End Sub


Private Sub CommandButton1_Click()
Application.ScreenUpdating = False

Dim iFila As Long
Dim ws As Worksheet
Set ws = Worksheets(4)

' Encuenta la siguiente fila vacía
iFila = ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row

' Verifica que se ingrese un nombre
If Me.Txtcodigo.Value = "" Then
Me.Txtcodigo.SetFocus
MsgBox "Debe ingresar un codigo"
Exit Sub
End If
'Calcula nuevo saldo en bodega del producto egresado
If Me.Txtsalida = "" Or Me.Txtmaquina = "" Or Me.Txttecnico = "" Then
MsgBox "Esta Dejando Campos Vacios"
Exit Sub
End If
nuevo_saldo = Val(Txtexistencia) - Val(Txtsalida)
If Me.Txtexistencia.Value < Me.Txtsalida.Value Then
MsgBox prompt:="Hay menos productos de los que solicita", Buttons:=vbOKOnly, Title:="Stock menor"
MsgBox prompt:="Le recordamos que su stock de " & Me.Txtdescripcion.Value & Chr(13) & "es de " & Me.Txtexistencia.Value, Buttons:=vbOKOnly, Title:="Stock actual"
Me.Txtcodigo.Value = ""
Me.Txtdescripcion.Value = ""
Me.Txtmaquina.Value = ""
Me.Txttecnico = ""
Me.Txtsalida = ""
Me.Txtexistencia = ""
Exit Sub
End If

MsgBox "Nuevo Saldo En Su Almacen del producto " & Txtdescripcion & " es de " & nuevo_saldo
Sheets("bd").Activate
ActiveCell.Offset(0, 2) = nuevo_saldo
Sheets("salida").Activate
' Copia los datos a la tabla excel
ws.Cells(iFila, 1).Value = Me.Txtfecha.Value
ws.Cells(iFila, 2).Value = Me.Txtcodigo.Value
ws.Cells(iFila, 3).Value = Me.Txtdescripcion.Value
ws.Cells(iFila, 4).Value = Me.Txtsalida.Value
ws.Cells(iFila, 5).Value = Me.Txtmaquina.Value
ws.Cells(iFila, 6).Value = Me.Txtproyecto.Value
ws.Cells(iFila, 7).Value = Me.Txttecnico

Me.Txtcodigo.Value = ""
Me.Txtdescripcion.Value = ""
Me.Txtmaquina.Value = ""
Me.Txttecnico = ""
Me.Txtproyecto = ""
Me.Txtsalida = ""
Me.Txtexistencia.Value = ""

Me.Txtcodigo.SetFocus

Application.ScreenUpdating = True
End Sub

Private Sub CommandButton2_Click()
Unload userform2
End Sub

Pero no pusiste el código como te lo recomendé

Tienes esto:

cliente_existente = Columns("a").Find(what:=Txtcodigo, after:=ActiveCell, LookIn:=xlValues, _
Lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, _
MatchCase:=True).Activate

'

Y yo envié esto:

Set b = Columns("A").Find(txtcodigo, Lookat:=xlPart)

Disculpa si lo intente con la parte que usted me aconsejo pero no me actualiza la "bd" en la columna "C" y estuve unas horas haciendo unas combinaciones con el código que me mando, hasta que me decidí a volver a preguntarle, y por eso ahora le mande el código completo, le agradezco su tiempo y atención, gracias

Dime lo siguiente:

¿En qué columna tienes al cliente?

¿En qué columna quieres actualizar qué dato?

Envíame tu archivo y me explicas cómo funciona tu formulario

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “chepe63” y el título de esta pregunta.

¡Gracias! buenas tardes ya le mande mi archivo mi correo es [email protected] un saludo desde mexico y muchas gracias

Te anexo el código actualizado

Private Sub Txtcodigo_Change()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Bd")
    Set b = Columns("A").Find(Txtcodigo, lookat:=xlWhole)
    If Not b Is Nothing Then
        Txtdescripcion = h1.Cells(b.Row, "B")
        Txtexistencia = h1.Cells(b.Row, "C")
    End If
    'Application.ScreenUpdating = True
End Sub
Respuesta
1

dato = Sheets("Hoja2").Cells(fila, uc2)
Set b = Sheets("Hoja1").Columns(uc1).Find(dato, LookIn:=xlValues, Lookat:=xlWhole)

If b Is Nothing Then
Sheets("Hoja2").Select
Rows(fila).Select
Selection.Copy
Sheets("Hoja3").Select
Cells(filat, 1).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
filat = filat + 1
End If

Ahi tienes un ejemplo de codificación usando find; en el link tienes un ejemplo completo que utiliza el método find.

http://www.programarexcel.com/2013/04/buscar-datos-en-tres-columnas-con-macro.html 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas