Saltar al contenido

Mensaje cuando no encuentre valor en una busqueda


poi11

Recommended Posts

publicado

Hola tengo un código q busca un valor en una base de datos lo que quiero es que cuando no encuentre el valor me de un MsgBox que diga "Código no encontrado" se que ya hay preguntas similares pero no he podido adaptarlo a mi código, por cierto ya tiene un MsgBox que avisa cuando se a dejado el campo en blanco

Gracias al que quiera ayudarme yo apenas estoy empezando con esto de las macros

Private Sub CommandButton1_Click()
If TextBox1 = Empty Then
MsgBox "No ha escrito nada en el campo CODIGO"
Else
Cells.Find(What:=Val(TextBox1), After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
ActiveCell.Offset(0, 1).Select
ComboBox4 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox1 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox2 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox3 = ActiveCell
ActiveCell.Offset(0, 1).Select
Calendar1 = ActiveCell
ActiveCell.Offset(0, 1).Select
TextBox3 = ActiveCell
Label7 = ActiveCell.Row
CommandButton3.SetFocus
End If
End Sub[/PHP]

Ejemplo.zip

Invitado Cacho R
publicado

Hola! poi11. Intenta, por ejemplo, con:

Private Sub CommandButton1_Click()
Dim C As Range

If TextBox1 = Empty Then
MsgBox "No ha escrito nada en el campo CODIGO"
Exit Sub
End If

On Error Resume Next
Set C = Cells.Find(What:=Val(TextBox1), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
On Error GoTo 0
If C Is Nothing Then
MsgBox "'" & TextBox1 & "' no fue encontrado."
Exit Sub
End If

ComboBox4 = C.Offset(, 1)
ComboBox1 = C.Offset(, 2)
ComboBox2 = C.Offset(, 3)
ComboBox3 = C.Offset(, 4)
Calendar1 = C.Offset(, 5)
TextBox3 = C.Offset(, 6)

Label7 = C.Row
Set C = Nothing
CommandButton3.SetFocus
End Sub[/PHP]

publicado
Hola! poi11. Intenta, por ejemplo, con:

Hola gracias por la ayuda pero vieras que con ese codigo ya no me busca nada mejor voy a subir un ejemplo reducido de lo q estoy haciendo... Y gracias por la ayuda

Ejemplo.zip

Invitado Cacho R
publicado
... con ese codigo ya no me busca nada ...

Varias cosas que comentar:

- Por favor: ¡Corrige "eso" de revisión con c... que me pone muy nervioso! (y lo digo en serio aunque me cause gracia).

- Con referencia al código sugerido, no es que no te busca nada. Por el contrario: ¡te encuentra todo! (jajaja)

Hay dos cosillas importantes que tienes que tener en cuenta cuando elaboras un código como éste:

-> ¿Estás seguro que necesitas a la fila 7 en tu programación?... O sea: me parece que si haces un pequeño esfuerzo de análisis verás que si tienes que modificar un dato, pues modificas la fila correspondiente y listo, ¿Se entiende?

-> Habías omitido mencionar algo muy importante: cuando uno escribe un código a buscar en el textbox1, lo que estás haciendo es duplicar ese valor en la celda A7.

Mostraste -inicialmente- tu código sin acompañar un archivo y vemos Cells.Find. "Cells" son todas las celdas de la hoja, o sea que buscas en todas las celdas de la hoja el código ingresado en textbox1.

Por lo tanto "tu mismo te estás pisando" ya que el Find encuentra como primer código el que tu mismo escribiste en A7. ¿Qué datos acompañan a esa fila?... ¡Ninguno! pues esa fila está vacía inicialmente.

¿Entiendes, entonces, que no es que no se encuentra nada sino que se encuentra lo que no se tiene que encontrar?

___

Dos soluciones, entonces:

- Reevalúa el sentido de la fila 7

- O reemplaza Cells por range([a8], cells(rows.count,"a").end(xlup))

Saludos, Cacho R.

publicado
Varias cosas que comentar:

Bueno perdona por responder hasta ahora pero he estado un poco ocupado con mi trabajo

Bueno por eso de revisión con "C" no me había fijado y por lo demás si es necesaria la fila A7 porque sirve para agregar códigos nuevos lo que hice fue agregar un Textbox dedicado a buscar solamente y le agregue estas lineas al código

Private Sub CommandButton1_Click()
If TextBox4 = Empty Then

MsgBox "No ha escrito nada en el campo BUSCAR"
Exit Sub
End If
On Error Resume Next
Application.ScreenUpdating = False
Sheets("7A").Activate
On Error GoTo noexiste
If Cells.Find(What:=Val(TextBox4), After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=True).Activate = True Then

TextBox1 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox4 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox1 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox2 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox3 = ActiveCell
ActiveCell.Offset(0, 1).Select
Calendar1 = ActiveCell
ActiveCell.Offset(0, 1).Select
TextBox3 = ActiveCell
Label7 = ActiveCell.Row
CommandButton3.SetFocus
TextBox4 = Empty
End If
Exit Sub
noexiste:
MsgBox "Codigo no existe en inventario"
Application.ScreenUpdating = True
TextBox4 = Empty
TextBox4.SetFocus
End Sub
[/PHP]

Ahora mi problema es que si pongo un "1" en el textbox me busca el primer valor que contenga ese "1" como 044515 cuando no debería

porque no existe el código "1". Alguna sugerencia..???

Gracias por el tiempo ...

Ejemplo.zip

Invitado Cacho R
publicado

Hola! poi11

Cuando tengas tiempo de mirar el código que te he pasado, advertirás que NI UNA SOLA VEZ estoy haciendo Activate y/o Select.

En ese sentido he definido un objeto Range llamado "C": ¿te habías dado cuenta?

Te diría que intentes comprender el sentido de eficiencia y precisión que ello conlleva.

Cualquier duda consultas, ¿OK?

publicado

Hola Cacho R

Bueno solo escribo para mencionar que ya resolví mi problema cuando ingreso un código que no existe me tira un cuadro de mensaje y ahora también hace las búsquedas exactas.

Así que ya pueden cerrar la consulta

Adjunto el codigo para que veas cm me quedo al final

Private Sub CommandButton1_Click()
If TextBox4 = Empty Then
MsgBox "Indroduzca un Código para buscar", vbInformation, "REPORTE REVISIÓN DE FECHAS"
Exit Sub
End If
On Error Resume Next
Application.ScreenUpdating = True
Sheets("7A").Activate
On Error GoTo noexiste
If Range("A:A").Find(What:=Val(TextBox4), After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=True).Activate = True Then
TextBox1 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox4 = ActiveCell
TextBox8 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox1 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox2 = ActiveCell
ActiveCell.Offset(0, 1).Select
ComboBox3 = ActiveCell
ActiveCell.Offset(0, 1).Select
Calendar1 = ActiveCell
TextBox7 = ActiveCell
ActiveCell.Offset(0, 1).Select
TextBox3 = ActiveCell
Label7 = ActiveCell.Row
ActiveCell.Offset(0, 4).Select
TextBox5 = ActiveCell
ActiveCell.Offset(0, 2).Select
TextBox6 = ActiveCell
CommandButton3.SetFocus
TextBox4 = Empty
End If
Exit Sub
noexiste:
MsgBox "El producto no se encuentra en el Inventario", vbInformation, "PRODUCTO NO ENCONTRADO"
Application.ScreenUpdating = True
TextBox4 = Empty
TextBox4.SetFocus
End Sub[/PHP]

Invitado Cacho R
publicado
... Adjunto el codigo para que veas cm me quedo al final...

Que de tu código no hayan "volado" los Select implica que no has podido "sacarle jugo" al código inicialmente sugerido, ni a las recomendaciones posteriores: ¡Una verdadera lástima!

Por decirlo de un modo "elegante": entre dos puntos, la recta es el camino más corto.

Pero que entre ellos existen infinitos caminos que los unen: ¡No hay dudas!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.