Identificar a que registro de una tabla corresponde un número ingresado desde un TextBox cuyo campo es un rango numérico

24/04/2007 - 00:53 por Insumos | Informe spam
Hola Gente del Foro:

Espero que todos esten muy bien. Les paso a contar mi problemita...
En una hoja llamada "Control" hay un tabla para el control de talonarios de
comprobantes. O sea, cada registro de la tabla representa un talonario que
tiene una numeración correlativa desde un número hasta el último. Tiene
cargados los siguientes campos en las columnas A a la D: Desde (es el primer
número del talonario), Hasta (es el último número del Talonario), Sucursal
(es el nombre de la sucursal a la que se envío el Talonario) y Recibió (es
la persona que recibió el talonario). Por ejemplo:

Desde Hasta Sucursal Recibió
1 50 Buenos Aires José
51 100 Mar del Plata Emanuel
101 150 Córdoba Marcos
151 200 Buenos Aires Ricardo
201 250 Rosario Juan
etc, etc

Ahora, en un UserForm yo tengo un TextBox en el que los usuarios ponen un
número de comprobante cualquiera, y lo que quiero es que en un Label
aparezca la Sucursal en la que se encuentra ese comprobante y en otro Label
quién recibió el mismo. Por ejemplo:
El usuario ingresa en el TextBox1 el número 132 y el resultado es que en el
Label1 aparece "Córdoba" y en el Label2 aparece "Marcos" (esto porque el
comprobante 132 es parte del talonario que va del 101 al 150 y se encuentra
en la sucursal "Córdoba" habiendo sido recibido por "Marcos", según los
datos del ejemplo).
Estuve probando algunas cosas con el evento Change para el TextBox1, pero lo
que no logro hacer es que el código se de cuenta, por ejemplo, de que 132
corresponde al registro que en la columna A contiene 101 y en la B 150.
Espero haberme expresado bien.
Desde ya muchas gracias!!
Saludos.

Mariano



CONTADURIA

Preguntas similare

Leer las respuestas

#1 Ivan
24/04/2007 - 02:09 | Informe spam
On 24 abr, 00:53, "Insumos" wrote:
Hola Gente del Foro:

Espero que todos esten muy bien. Les paso a contar mi problemita...
En una hoja llamada "Control" hay un tabla para el control de talonarios de
comprobantes. O sea, cada registro de la tabla representa un talonario que
tiene una numeración correlativa desde un número hasta el último. Tiene
cargados los siguientes campos en las columnas A a la D: Desde (es el primer
número del talonario), Hasta (es el último número del Talonario), Sucursal
(es el nombre de la sucursal a la que se envío el Talonario) y Recibió (es
la persona que recibió el talonario). Por ejemplo:

Desde Hasta Sucursal Recibió
1 50 Buenos Aires José
51 100 Mar del Plata Emanuel
101 150 Córdoba Marcos
151 200 Buenos Aires Ricardo
201 250 Rosario Juan
etc, etc

Ahora, en un UserForm yo tengo un TextBox en el que los usuarios ponen un
número de comprobante cualquiera, y lo que quiero es que en un Label
aparezca la Sucursal en la que se encuentra ese comprobante y en otro Label
quién recibió el mismo. Por ejemplo:
El usuario ingresa en el TextBox1 el número 132 y el resultado es que en el
Label1 aparece "Córdoba" y en el Label2 aparece "Marcos" (esto porque el
comprobante 132 es parte del talonario que va del 101 al 150 y se encuentra
en la sucursal "Córdoba" habiendo sido recibido por "Marcos", según los
datos del ejemplo).
Estuve probando algunas cosas con el evento Change para el TextBox1, pero lo
que no logro hacer es que el código se de cuenta, por ejemplo, de que 132
corresponde al registro que en la columna A contiene 101 y en la B 150.
Espero haberme expresado bien.
Desde ya muchas gracias!!
Saludos.

Mariano

CONTADURIA



hola Mariano,

a la espera de una solucion mejor por parte de algun experto, una
forma de hacer lo que buscas creo que podria ser algo parecido a esto:


suponiendo que los talonarios tienen siempre el nº de talones que
expones (50), la fila uno tiene los titulos de columna y los datos
empiezan en la 2, en el evento Change del combo pon

dim Celda as range
with worksheets("hoja_de_la_lista")
if .[a2]="" then exit sub
for each celda in .range("a2:a" & .[a65536].end(xlup).row)
if celda <= val(TuTextBox) and val(TuTextBox) < celda + 49 then _
TuLabel = celda.offset(,2): exit sub
next
end with

solo dos apuntes:

1º) ten en cuenta que segun creo, todo (o al menos los valores
numericos) lo que entra en un textbox se convierte en texto, luego
para compararlo con otro numero deberas volver a convertirlo en
numero, bien con val, bien con otro convertidor de tipos..

2º) deberias intentar hacer una validacion de que 'lo introducido' en
el textbox sea efectivamente un nº (creo recordar que en el foro hay
bastantes consultas al respecto, puedes probar con el buscador), o en
su defecto incluir algun control de errores tipo 'If
isnumeric(val(tutextbox))= false then msgbox "Tienes que introducir un
nº" o similar

bueno echale un ojo a ver que tal y ten cuidado pues esta escrito aqui
en el foro y puedo haber metido la pata al escribir algun termino.

en cualquier caso por ahi pueden ir los tiros, aunque como te
comentaba seguro que hay formas mucho mejores/rapidas, bien con find,
match o similar. Si es asi espero que alguien se anime a comentarlo

un saludo y hasta pronto
Ivan

PD: si prefiere compara por las dos columnas cambia->

and val(TuTextBox) < celda + 49

por->

and val(TuTextBox) < celda.offset(,1)
Respuesta Responder a este mensaje
#2 Ivan
24/04/2007 - 02:13 | Informe spam
perdon, quise decir:

por->

and val(TuTextBox) <= celda.offset(,1)

un saludo
Ivan
Respuesta Responder a este mensaje
#3 Ivan
24/04/2007 - 16:56 | Informe spam
hola de nuevo, Mariano, aqui va un nuevo codigo, no para darte el
trabajo hecho, sino para que (dado que parece que, como yo, estas
intentando aprender un poco de vba <ojo, es 'muy' adictivo>) veas
varias posibilidades que te podrian surgir en el caso que planteas y
las estudies/adaptes si quieres. Aparte en el codigo que te pase antes
puse '49' donde debia poner '50'

OJO: ten cuidado con los saltos de linea y sus correspondientes
guiones de idem. Como veras hay muchos, sobre todo para que no se
trabe en el editor del foro (aun asi ten cuidado)

Private Sub TextBox1_Change()
Dim Celda As Range
With Hoja1
If .[a2] = "" Then MsgBox _
"No existen registros " & _
"en la lista de busqueda": Exit Sub
If TextBox1 = "" Then Exit Sub
If Not IsNumeric(TextBox1) Then _
Label1.Caption = _
"Introduce un nº valido": _
TextBox1 = "": Exit Sub
If Val(TextBox1) > .[b65536].End(xlUp) Then _
Label1.Caption = _
"Has introducido un nº muy alto": _
TextBox1 = "": Exit Sub
For Each Celda In .Range("a2:a" & _
.[a65536].End(xlUp).Row)
If Celda <= Val(TextBox1) And _
Val(TextBox1) < Celda + 50 Then _
Label1.Caption = Celda.Offset(, 2): _
Exit Sub
Next
End With
End Sub

espero te ayude en algo

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#4 Insumos
24/04/2007 - 17:20 | Informe spam
Ivan:

Te estoy inmensamente agradecido por tu amable ayuda, que me ha sido de suma
utilidad. Estuve probando todo lo que me dijiste, y pude solucionar la
cuestión. Yo antes había probado algo parecido al primer código que
posteaste, pero no había convertido el contenido del TextBox a valor por
medio de Val, ya que no sabía que existia ese comando. A continuación te
cuento como quedó mi solución final.

Use este código para el evento change del TextBox1:

Private Sub TextBox1_Change()
Dim Celda As Range
With Worksheets("Control")
If .[A2] = "" Then Exit Sub _
"No existen registros " & _
"en la lista de busqueda": Exit Sub
If Val(TextBox1) > .[b65536].End(xlUp) Then _
Label8.Caption = _
"Has introducido un nº muy alto": _
TextBox1 = "": Exit Sub
For Each Celda In .Range("a2:a" & .[a65536].End(xlUp).Row)
If Celda <= Val(TextBox1) And Val(TextBox1) <= Celda.Offset(, 1) Then
Label8 = Celda.Offset(, 2)
Label9 = Celda.Offset(, 3)
Exit Sub
Else
Label8 = Empty
Label9 = Empty
End If
Next
End With
End Sub

Y use este código para solucionar el problema de limitar la entrada de datos
sólo numéricos al TextBox1 (que me lo había aprendido del foro tiempo
antes):

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
MsgBox prompt:="Sólo se admiten números", Buttons:=vbInformation +
vbOKOnly
KeyAscii = 0
End If
End Sub

Bueno, ya tengo en funcionamiento mi pequeño sistema gracias a tu ayuda
Ivan. Te vuelvo a agradecer tu amable ayuda y atención.
Saludos desde Mar del Plata, Argentina!!

Mariano

"Ivan" escribió en el mensaje
news:

hola de nuevo, Mariano, aqui va un nuevo codigo, no para darte el
trabajo hecho, sino para que (dado que parece que, como yo, estas
intentando aprender un poco de vba <ojo, es 'muy' adictivo>) veas
varias posibilidades que te podrian surgir en el caso que planteas y
las estudies/adaptes si quieres. Aparte en el codigo que te pase antes
puse '49' donde debia poner '50'

OJO: ten cuidado con los saltos de linea y sus correspondientes
guiones de idem. Como veras hay muchos, sobre todo para que no se
trabe en el editor del foro (aun asi ten cuidado)

Private Sub TextBox1_Change()
Dim Celda As Range
With Hoja1
If .[a2] = "" Then MsgBox _
"No existen registros " & _
"en la lista de busqueda": Exit Sub
If TextBox1 = "" Then Exit Sub
If Not IsNumeric(TextBox1) Then _
Label1.Caption = _
"Introduce un nº valido": _
TextBox1 = "": Exit Sub
If Val(TextBox1) > .[b65536].End(xlUp) Then _
Label1.Caption = _
"Has introducido un nº muy alto": _
TextBox1 = "": Exit Sub
For Each Celda In .Range("a2:a" & _
.[a65536].End(xlUp).Row)
If Celda <= Val(TextBox1) And _
Val(TextBox1) < Celda + 50 Then _
Label1.Caption = Celda.Offset(, 2): _
Exit Sub
Next
End With
End Sub

espero te ayude en algo

un saludo y hasta pronto
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida