Generar un Mensaje de error en formulario de consulta

Disculpa que te moleste de nuevo, ¿me puedes ayudar con el siguiente código?

Private Sub CommandButton1_Click()

Valor = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets("Proveedores").Range("b:k"), 7, 0)
Me.Label1.Caption = Valor
Sheets("Cotizacion").Select
Range("G11") = Valor
Unload Me
End Sub

Lo que hace esta función es buscar el rut del proveedor y pegarlo en la celda correspondiente para generar una cotización, lo hace todo bien, pero cuando no encuentro el proveedor en la lista me manda a depurar,¿podrías ayudarme a generar un msje de error cuando no lo encuentre? Desde ya, muchas gracias!

Otra consulta, es si me puedes recomendar algún manual para comenzar en esto de la programación en excel o vb... Estoy recién comenzando y me gustaría poder aprender en profundidad.

2 Respuestas

Respuesta
1
On Error GoTo ErrorHandler
Private Sub CommandButton1_Click()
Valor = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets("Proveedores").Range("b:k"), 7, 0)
Me.Label1.Caption = Valor
Sheets("Cotizacion").Select
Range("G11") = Valor
exit sub
Unload Me
ErrorHandler:
MsgBox "tu msj"
end sub

Hola creo que es de esa forma que debes manejarlo. eso evitara que te envie al depurador.

¡Gracias! Amigo, funcionó bien, pero debí invertir el orden de las dos primeras líneas ;)

Private Sub CommandButton1_Click()
On Error GoTo ErrorHandler
Valor = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets("Proveedores").Range("b:k"), 7, 0)
Me.Label1.Caption = Valor
Sheets("Cotizacion").Select
Range("G11") = Valor
Unload Me
exit sub
ErrorHandler:
MsgBox "tu msj"
end sub

Ese fue el resultado final...  MUCHAS GRACIAS!!!

Respuesta
1

H o l a:

Esta sería otra opción para controlar el error:

Private Sub CommandButton1_Click()
    Valor = Application.VLookup(ComboBox1, Sheets("Proveedores").Range("b:k"), 7, 0)
    If IsError(Valor) Then
        MsgBox "Valor no encontrado"
    Else
        Me.Label1.Caption = Valor
        Sheets("Cotizacion").Select
        Range("G11") = Valor
        Unload Me
    End If
End Sub

Pero te recomiendo utilizar el método find:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set b = Sheets("Proveedores").Range("b:k").Find(ComboBox1, lookat:=xlWhole)
    If Not b Is Nothing Then
        valor = Sheets("Proveedores").Cells(b.Row, "H")
        Me.Label1.Caption = valor
        Sheets("Cotizacion").Select
        Range("G11") = valor
        Unload Me
    Else
        MsgBox "Valor no encontrado"
    End If
End Sub

La diferencia es que con vlookup, solamente obtienes un dato; con el método find en el objeto b tienes, la celda encontrada, la fila, la columna, la hoja, el valor, el color, el tipo de letra, en fin todas las propiedades de la celda encontrada. Ya con la celda, puedes traer el dato de H o de F, etc.


Amigo... ¿y si quiero escribir de vuelta? Cambiando el label1 por un textbox...

Es decir el valor mostrado, tener la posibilidad de cambiarlo y enviarlo de vuelta, o sea... modificar el valor. Estoy intentando hacer un formulario de consulta, modificación y alta de nuevo registro.

Gracias!

Para ponerlo de regreso, si es modificación.

Private Sub CommandButton2_Click()
'Por.Dante Amor
    Set b = Sheets("Proveedores").Range("b:k").Find(ComboBox1, lookat:=xlWhole)
    If Not b Is Nothing Then
        Sheets("Proveedores").Cells(b.Row, "H") = TextBox1
    Else
        MsgBox "Dato del combo no encontrado"
    End If
End Sub

Es un ejemplo, tal vez estás pasando más datos; lo importante, primero es encontrar el dato que tienes en el combobox1, y después reemplazar lo que pusiste en los textbox en su respectiva columna.

Si necesitas más detalle para la modificación,

Con mucho gusto te ayudo con todas tus peticiones, crea una nueva pregunta por cada petición.

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas