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

Preguntas similare

Leer las respuestas

#6 Contaduria
10/07/2007 - 16:16 | Informe spam
Hola Héctor Miguel:

Excelente. La solución ha funcionado perfectamente!! Te agradezco mucho tu
ayuda.
Gracias y hasta pronto. Saludos!

Mariano

"Héctor Miguel" escribió en el mensaje
news:
hola, Mariano !

> ... la ultima parte tira un error por esta linea: Call TextBox1_Exit,


False [...]
> ... probe eliminando la línea directamente y funciona.
> Lo unico... es que no muestra en pantalla "en tiempo real" cuando cambia


la condición del registro
> (la que se muestra en el Label6) como sucedia antes. Habra manera de


solucionar esto?
>
> Por cierto, voy a pegar abajo todos los códigos relacionados como los


estoy usando ahora
> ya que cambie alguna cosita (por ejemplo lo que muestra la Label6, que


ahora es la condicion SI EN/NO EN del campo G):

prueba en vez de *llamar* al evento '_exit' del textbox [que causaria un


re-inicio del ciclo de busquedas]...
-> con una *actualizacion* [o refresco] de los cambios en la celda


*afectada* de la columna 'G'

de: -> Call TextBox1_Exit, False
a: -> Label6 = Celda.Offset(, 5)

saludos,
hector.

__ el codigo expuesto __
> Dim Celda As Range, Registros As Integer, Actual As Integer
>
> Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger,


ByVal Shift As Integer)
>
> On Error Resume Next
> If KeyCode = 46 Then
> With Celda.Offset(, 5)
> .Value = IIf(Left(.Value, 2) = "NO", "SI", "NO") & " EN"
> End With
> End If
>


QUE
SE
> 'Call TextBox1_Exit, False
>
> End Sub
>
> 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(, 5)
> 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(, 5)
> CommandButton2.Enabled = Actual < Registros
> End Sub


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida