Macro tiene mensaje de error pero no lo muestra

Tengo la siguiente macro que filtra al buscar por numero de documento, pero si no existe debe salir un mensaje diciendo que no existe, pero no entiendo porque la ejecuta bien pero si dígito un numero que no esta en la base, este mensaje de la macro no sale.

Private Sub CommandButton5_Click()
On Error GoTo Errores
If Me.txtFiltro1.Value = "" Then Exit Sub
Me.ListBox1.Clear
j = 1
Filas = Sheets("Inventario").Range("A2").CurrentRegion.Rows.Count
For I = 1 To Filas
    If LCase(Cells(I, j).Offset(0, 0).Value) Like "*" & LCase(Me.txtFiltro1.Value) & "*" Then
        Me.ListBox1.AddItem Cells(I, j)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(I, j).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(I, j).Offset(0, 2)
Else
    End If
Next
Exit Sub
Errores:
MsgBox "No se encuentra.", vbExclamation, "EXCELeINFO"
End Sub

2 Respuestas

Respuesta
1

No aparece el mensaje porque no se produce un error en tiempo de ejecución.

Cuando se usa "On Error Goto XXXX", la ejecución salta a la etiqueta XXXX si se produce un error. Por ejemplo, una división por cero, tratar de abrir un archivo que no existe, etc.

En su caso, el código no produce ningún error, por lo que no irá a la etiqueta "Errores".

Si quiere controlar si se ha encontrado o no algún elemento, puede usar una variable booleana. Algo así como (no escribo todo el código, sino sólo lo que puede darle la idea):

Dim fExiste As Boolean
fExiste = False
For i = 1 To Filas
    If <Coincide con el filtro> Then
        <Lo añado a la lista>
        fExiste = True
    End If
Next
If Not fExiste Then
    MsgBox "No existe"
End If

¡Gracias! 

He probado como me dices, pero siempre me sale el mensaje y yo necesito que el mensaje de vea cuando no encuentre información.

El mensaje sólo puede aparecer si fExiste es falso. Revise el código que ha usado y verifique que, cuando se encuentra una coincidencia, se ejecuta la instrucción que establece el valor de fExiste a verdadero.

Si no lo logra, copie el código aquí para que le eche un vistazo.

Respuesta
2

Prueba lo siguiente:

Private Sub CommandButton5_Click()
  Dim sh As Worksheet
  Dim i As Long, j As Long
  Dim f As Range
  '
  Set sh = Sheets("Inventario")
  j = 1   'columna "A"
  '
  Me.ListBox1.Clear
  If Me.txtFiltro1.Value = "" Then Exit Sub
  '
  Set f = sh.Columns(j).Find(txtFiltro1.Value, , xlValues, xlPart, , , False)
  If Not f Is Nothing Then
    For i = 1 To sh.Cells(Rows.Count, j).End(3).Row
      If LCase(sh.Cells(i, j).Value) Like "*" & LCase(Me.txtFiltro1.Value) & "*" Then
        Me.ListBox1.AddItem Cells(i, j)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
      End If
    Next
  Else
    MsgBox "No se encuentra.", vbExclamation, "FILTRAR DOCUMENTO"
  End If
End Sub

Nota: en la medida de lo posible no utilices la instrucción "On Error", porque puede ser un error en el código, lo recomendable es utilizar el código adecuado para evitar los errores.

¡Gracias! 

Me faltó la referencia a la hoja en estas líneas:

 Me. ListBox1. AddItem sh.Cells(i, j)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = sh.Cells(i, j).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = sh.Cells(i, j).Offset(0, 2)

De esa manera puedes ejecutarlo desde cualquier hoja.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas