Buscar siguiente registro en la función Find desde un dato ingresado en un TextBox

03/07/2007 - 02:14 por Contaduria | Informe spam
Hola Gente del Foro:

Espero esten todos bien! Tengo el siguiente código que lo que hace es buscar
un número que se ingresa en un textbox y que muestra ciertos datos en
algunos label:

Private Sub TextBox1_Change()

Dim fila As Integer

On Error Resume Next
fila = ActiveSheet.Range("B:B").Find(TextBox1, , LookIn:=xlValues,
LookAt:=xlWhole).Row

Label7 = Format(ActiveSheet.Cells(fila, 6).Value, "#,#00.00")
Label5.Caption = Format(ActiveSheet.Cells(fila, 5), "dd/mm/yyyy")
Label6 = ActiveSheet.Cells(fila, 3).Value
ActiveSheet.Range("A1") = fila

If ActiveSheet.Range("A1") = 0 Then
Label7 = ""
Label5 = ""
Label6 = ""
End If

End Sub

El código funciona perfecto. Pero en el caso de que exista más de un
registro con el mismo número siempre encuentra el primero, y lo que no se
como hacer es: como decirle al código que luego de ejecutar la secuencia, si
yo veo que los datos que se ven en el label no corresponden con lo que yo
busco, apretando una tecla (por ejemplo enter) me busque el siguiente
registro coincidente con el número en el textbox y muestre los datos de ese.

Ejemplo:

Estos son los registros en la hoja actual:

A B C D
E F G
09/11/06 103 CARGAS SOCIALES 34746 09/11/06
6,553.89 NO EN
09/11/06 104 CARGAS SOCIALES 34750 09/11/06 16,500.00
NO EN
16/11/06 104 XXX S.R.L. 35509 16/11/06
1,500.00 NO EN
17/11/06 140 XXX S.R.L. 35511 17/11/06
2,000.00 NO EN
18/08/06 538 XXX S.R.L. 29997 18/08/06
2,500.00 NO EN

En el textbox yo ingreso "104"
Resultado con el código actual: muestra en el Label7 "16,500.00", en el
Label5 "09/11/2006", y en el Label6 "CARGAS SOCIALES"

Ahora lo que yo quiero es...

En el textbox yo ingreso "104"
Resultado: muestra en el Label7 "16,500.00", en el Label5 "09/11/2006", y en
el Label6 "CARGAS SOCIALES", al darme cuenta que no es el resultado que yo
busco aprieto la tecla enter (o alguna otra) y acto seguido muestra en el
Label7 "1,500.00", en el Label5 "16/11/2006", y en el Label6 "XXX S.R.L."

Pienso que debe tener que ver con algo de poner el atributo After:= en la
función Find, pero no se como escribirlo para que funcione (ya que lo
intente y no funciona).
Espero haberme explicado bien!
Saludos y desde ya muchas gracias!

Mariano
 

Leer las respuestas

#1 Héctor Miguel
03/07/2007 - 07:26 | Informe spam
hola, Mariano !

puedes consutar la ayuda en linea [vba-excel] por el metodo .FindNext, pero creo que seria mejor [p.e. si como]...
en la siguiente propuesta, *te cambio* el uso de la variable *fila* por un tipo de dato *Range*
del que puedes utilizar la propiedad .Offset(fila, col) para hacer referencia a otras columnas
y estoy suponiendo que puedes agregar [p.e.] un CommandButton2 [?] para buscar siguiente/s coincidencia/s

tambien te cambio el evento '_change' por el evento '_exit' del textbox [para no estar *machacando* la celda 'A1' :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Dim Celda As Range, Registros As Integer, Actual As Integer
Private Sub TextBox1_Enter()
CommandButton2.Enabled = False
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Label7 = Empty
Label5 = Empty
Label6 = Empty
Registros = Application.CountIf(Range("b:b"), TextBox1)
Actual = -(Registros > 0)
CommandButton2.Caption = "Registro " & Actual & " de " & Registros
CommandButton2.Enabled = Registros
On Error GoTo Finalizar
Set Celda = Range("b:b").Find(TextBox1, , xlValues, xlWhole)
Label7 = Format(Celda.Offset(, 4), "#,#00.00")
Label5 = Format(Celda.Offset(, 3), "dd/mm/yyyy")
Label6 = Celda.Offset(, 1)
Exit Sub
Finalizar:
MsgBox "No existe el registro solicitado !!!"
End Sub
Private Sub CommandButton2_Click()
On Error Resume Next
Actual = Actual + 1
Set Celda = Range("b:b").Find(TextBox1, Celda, xlValues, xlWhole)
CommandButton2.Caption = "Registro " & Actual & " de " & Registros
Label7 = Format(Celda.Offset(, 4), "#,#00.00")
Label5 = Format(Celda.Offset(, 3), "dd/mm/yyyy")
Label6 = Celda.Offset(, 1)
CommandButton2.Enabled = Actual < Registros
End Sub

__ la consulta original __
... el siguiente codigo... buscar... que se ingresa en un textbox y... muestra... datos en algunos label:

Private Sub TextBox1_Change()
Dim fila As Integer
fila = ActiveSheet.Range("B:B").Find(TextBox1, , LookIn:=xlValues, LookAt:=xlWhole).Row
Label7 = Format(ActiveSheet.Cells(fila, 6).Value, "#,#00.00")
Label5.Caption = Format(ActiveSheet.Cells(fila, 5), "dd/mm/yyyy")
Label6 = ActiveSheet.Cells(fila, 3).Value
ActiveSheet.Range("A1") = fila
If ActiveSheet.Range("A1") = 0 Then
Label7 = ""
Label5 = ""
Label6 = ""
End If
End Sub

... en el caso de que exista mas de un registro con el mismo numero
... como decirle al codigo que... si yo veo que los datos... no corresponden con lo que yo busco
apretando una tecla (por ejemplo enter) me busque el siguiente registro coincidente [...]

Preguntas similares