Mensaje de texto en macros

Tengo esta macros funciona bien para buscar el código y arrojar el resultado, pero quiero que me salga un mensaje de texto cuando no lo encontre el codigo solicitado. O talvez lo podrian mejorar

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim cont, ultlinea As Long
Dim und, descripcion, codigo, rango As Variant
ultlinea = Sheets("INGRESOS").Range("B" & Rows.Count).End(xlUp).Row
Set rango = Sheets("DATOS").Range("A:D")
For cont = 6 To ultlinea
codigo = Sheets("INGRESOS").Cells(cont, 2)
und = Application.VLookup(codigo, rango, 3, False)
descripcion = Application.VLookup(codigo, rango, 2, False)
Sheets("INGRESOS").Cells(cont, 4) = und
Sheets("INGRESOS").Cells(cont, 5) = descripcion
Next cont

End Sub

1 Respuesta

Respuesta
1

Te invito a mirar el video 29 de mi canal donde desarrollo 3 métodos de búsqueda y en todos se contempla la opción de enviar un mensaje o algún resultado en caso de no encontrar el valor.

Y de paso te sirven los ejemplos para no tener que recorrer la lista completa.

Si luego necesitas ayuda para adaptarla a tu libro comentame qué método vas a utilizar y la referencia de hoja/celdas qué estás seleccionando.

Reitero respuesta anterior:

Si luego necesitas ayuda para adaptarla a tu libro comentame qué método vas a utilizar y la referencia de hoja/celdas qué estás seleccionando.

Pero si el tema quedó resuelto debes valorar la respuesta para quitarla de las pendientes. Al pie de la página encontrarás botones para marcar Excelente o buena.

Sdos!

Necesito adaptar una macro para este proceso.

pasar la información a la hoja de ingresos desde la base de datos según el código digitado.

 

cuando se digite el código(en la columna B de la hoja Ingresos) y no encuentre en la base de datos el código solicitado me salga un mensaje de "que no existe el cogido solicitado".

Excel es básicamente una planilla de cálculo. Por lo que primero hay que tratar de resolver las tareas con sus funciones y herramientas. Luego, para un nivel más avanzado, se puede hacer uso de la programación y resolver cuestiones más complejas.

Por lo tanto, tu hoja solo requiere de la función estrella de Excel: BUSCARV.

En tu imagen se observa que ya la estás utilizando... solo te falta agregar otra función (SI. ERROR) para personalizar el mensaje en caso de no encontrar coincidencias.

Para la col D (Unid) en lugar de mensaje le dejé vacío y así quedó la sintaxis:

=SI.ERROR(BUSCARV(B4;DATOS!A:C;3;FALSO);"")

Y para la col E sería:

=SI.ERROR(BUSCARV(B4;DATOS!A:C;2;FALSO);"No existe código solicitado")

Notas:

- Estoy utilizado el separador punto y coma ... quizás en tu versión solo utilices coma.

- Estoy considerando un rango de DAtos de A:D... en tu imagen no se ven los encabezados de col. Ajusta a tu modelo.

- La función SI. ERROR en algunas versiones de Excel puede aparecer diferente, como SIERROR.

Sdos y no olvides valorar la respuesta.

Elsa

http://aplicaexcel.com/funciones.htm

no es lo que necesito, estoy tratando de hacerlo con un a macro.

Esta es la macro que dejaste al inicio a la que le agregué el mensaje.

Pero tené presente que la estás ejecutando al seleccionar CUALQUIER celda de la hoja... y vuelve a verificar TODA LA COL B... no se si esto es lo que estarás necesitando.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'ajustada
'SE EJECUTA AL SELECCIONAR CUALQUIER CELDA DE LA HOJA INGRESOS
'recorriendo toda la col B y verificando exista o no el código
Dim cont, ultlinea As Long
Dim und, descripcion, codigo, rango As Variant
ultlinea = Sheets("INGRESOS").Range("B" & Rows.Count).End(xlUp).Row
Set rango = Sheets("DATOS").Range("A:D")
For cont = 6 To ultlinea
    codigo = Sheets("INGRESOS").Cells(cont, 2)
    und = Application.VLookup(codigo, rango, 3, False)
    descripcion = Application.VLookup(codigo, rango, 2, False)
    If IsError(und) Then
        Sheets("INGRESOS").Cells(cont, 4) = ""
    Else
        Sheets("INGRESOS").Cells(cont, 4) = und
    End If
    If IsError(descripcion) Then
        Sheets("INGRESOS").Cells(cont, 5) = "NO EXISTE"
    Else
        Sheets("INGRESOS").Cells(cont, 5) = descripcion
    End If
Next cont
End Sub

Como también comentaste:  O talvez lo podrian mejorar 

Te dejo otra macro que se ejecuta cuando se digite el código(en la columna B de la hoja Ingresos)

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'solo controla lo ingresado en col B a partir de fila 6 de esta hoja (INGRESOS)
If Target.Column <> 2 Or Target.Row < 6 Then Exit Sub
'si se limpia el rango no se ejecuta
If Target.Count > 1 Then Exit Sub
Set hod = Sheets("DATOS")
'traer campos de hoja DATOS
Set busca = hod.Range("A:A").Find(Trim(Target.Value), LookIn:=xlValues, lookat:=xlWhole)
If busca Is Nothing Then
    Range("D" & Target.Row) = ""
    Range("E" & Target.Row) = "No se encuentra"   'escribir mensaje a gusto
Else
    Range("D" & Target.Row) = hod.Range("C" & busca.Row)
    Range("E" & Target.Row) = hod.Range("C" & busca.Row)
End If
End Sub

Está explicada por lo que no tendrás dificultad para ajustar líneas... sino consulta nuevamente.

NOTA: solo deja una de las 2 macros en hoja INGRESOS.

Sdos!

¡Gracias! 

la segunda opción es muy buena se adapta a mis necesidades.

Muchas gracias

Si. Se suele confundir el evento Selection_Change con el de Change: el primero se ejecuta al 'seleccionar' la celda y el segundo al 'modificarla'.

Por favor no olvides valorar la respuesta para que se me quite de las pendientes. Al pie de la ventana verás un par de opciones (Excelente o buena).

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas