Ayuda VLOOKUP usado con VBA

Tengo el siguiente código en un modulo

Sub buscar()
On Error GoTo ERROR2:
'=================================== Reporte de linea 501
Reporte.Range("C6")
= Application.WorksheetFunction.VLookup(Reporte.Range("B2"), L501.Range("A3:R4500"), 2, False)
'=================================== Reporte de linea 502
Reporte.Range("E6")
= Application.WorksheetFunction.VLookup(Reporte.Range("B2"), L502.Range("A3:R4500"), 2, False)
'=================================== Reporte de linea 503

Reporte.Range("G6")
= Application.WorksheetFunction.VLookup(Reporte.Range("B2"),
L503.Range("A3:R4500"), 2, False)
Exit Sub
ERROR2:
If
Err.Number = 1004 Then
MsgBox "Fecha introducida no se encuentra"
Range("B2").Value
= ""
Range("B2").Select
'ElseIf Err.Number = 13 Then
'MsgBox ("Valor de la celda de fecha es
incorrecto")
End If
End Sub

Esta macro trata de una búsqueda por fecha desde la celda B2 en una hoja llamada Reporte, la búsqueda la hace en tres hojas llamadas L501, L502 y L503 el código se ejecuta muy bien si encuentra la fecha en todas las hojas pero se detiene cuando no encuentra la fecha en cualquiera de las demás hojas presentando el mensaje "Fecha introducida no se encuentra" el cual solo debería presentarlo si no se encuentra la fecha en ninguna de las hojas, me gustaría saber como hago para si no encuentra la fecha en cualquiera de las hojas pueda continuar con la carga de los datos de la hoja siguiente.

1 respuesta

Respuesta
2

Prueba con este código:

Sub buscar()
Dim valBuscar As Variant
Dim aux As Variant
Dim snAlgunOk As Boolean
snAlgunOk = False
valBuscar = Reporte.Range("B2")
On Error Resume Next
aux = Application.WorksheetFunction.VLookup(valBuscar, L501.Range("A3:R4500"), 2, False)
If Err = 0 Then snAlgunOk = True Else aux = ""
On Error GoTo 0
Reporte.Range("C6") = aux
On Error Resume Next
aux = Application.WorksheetFunction.VLookup(valBuscar, L502.Range("A3:R4500"), 2, False)
If Err = 0 Then snAlgunOk = True Else aux = ""
On Error GoTo 0
Reporte.Range("E6") = aux
On Error Resume Next
aux = Application.WorksheetFunction.VLookup(valBuscar, L503.Range("A3:R4500"), 2, False)
If Err = 0 Then snAlgunOk = True Else aux = ""
On Error GoTo 0
Reporte.Range("G6") = aux
If Not snAlgunOk Then MsgBox "Fecha introducida no se encuentra"
End Sub

Una cosa importantísima: si usas la instrucción "On error..." para desactivar los errores de VB no te olvides de volver a activarlos con "On Error Goto 0". Si no lo haces puedes perder el control de la ejecución y provocar fallos muy gordos y difíciles de localizar.

Hace lo mismo cuando una de las hojas no concuerda con la fecha buscada

La verdad es que me ha costado un rato localizar la sintaxis correcta. Ahora sí funciona:

Sub buscar()
Dim aux As Variant
Dim snAlgunOk As Boolean
snAlgunOk = False
On Error Resume Next
aux = Application.WorksheetFunction.VLookup(Range("reporte!B2"), Range("L501!A3:B4500"), 2, False)
If Err = 0 Then snAlgunOk = True Else aux = ""
On Error GoTo 0
Sheets("Reporte").Range("C6") = aux
On Error Resume Next
aux = Application.WorksheetFunction.VLookup(Range("reporte!B2"), Range("L502!A3:B4500"), 2, False)
'aux = Application.WorksheetFunction.VLookup(valBuscar, Sheets("L502").Range("A3:B4500"), 2, False)
If Err = 0 Then snAlgunOk = True Else aux = ""
On Error GoTo 0
Sheets("Reporte").Range("E6") = aux
On Error Resume Next
aux = Application.WorksheetFunction.VLookup(Range("reporte!B2"), Range("L503!A3:B4500"), 2, False)
'aux = Application.WorksheetFunction.VLookup(valBuscar, Sheets("L503").Range("A3:B4500"), 2, False)
If Err = 0 Then snAlgunOk = True Else aux = ""
On Error GoTo 0
Sheets("Reporte").Range("G6") = aux
If Not snAlgunOk Then MsgBox "Fecha introducida no se encuentra"
End Sub

Disculpa la tardanza pero es lo mismo la idea es que si la fecha no aparece en ninguna de las hojas me presente el mensaje "Fecha introducida no se encuentra" y si puedes hacer un cambio en la parte de las opciones que se cargan en la hoja reporte ya que pones una variable que toma los datos y realmente son mas datos los que carga la pagina a las diferentes celdas

Ejemplo:

Reporte.Range("C6") = Application.WorksheetFunction.VLookup(Reporte.Range("B2"), L501.Range("A3:R4500"), 2, False)
Reporte.Range("C7") = Application.WorksheetFunction.VLookup(Reporte.Range("B2"), L501.Range("A3:R4500"), 3, False)

Como hago para enviarle el archivo para que vea funcionamiento y de antemanos es un tanto desorganizado porque no se programar mucho.....

Gracias de nuevo

Disculpa pero no suelo admitir ficheros por problemas con los virus. Intentaremos verlo desde aquí.

No acabo de entender qué es lo que planteas buscar ahora con la columna 3. Cuéntame un poco de qué va el tema.

Gracias

Pongo el código después ya que estoy intentando hacer lo siguiente:

En la hoja reporte se deben cargar valores en diferentes celdas correspondientes a cada hoja en la que se busque con el VLOOCKUP, precisamente anoche se me ocurrió un procedimiento, (es algo mental pues como le dije no se mucho de programación) pero pienso si con una variable especifica y unos cuantos IF puedo lograr lo que quiero.

Es decir si la fecha x no se encuentra en una determinada hoja que pase a la siguiente y lo de la variable es que si la fecha buscada no aparece en ninguna de las hojas se le asignara un valor y en caso de que si otro valor y dependiendo de ese valor me arroje el mensaje de que la fecha no existe

Prueba a ver con este código. Espero que te guste así.

Sub buscar()
' Borramos los datos anteriores
Sheets("reporte").Range("C6") = ""
Sheets("reporte").Range("C7") = ""
Sheets("reporte").Range("E6") = ""
Sheets("reporte").Range("E7") = ""
Sheets("reporte").Range("G6") = ""
Sheets("reporte").Range("G7") = ""
' Buscamos en L501. Si está buscamos también la columna 3 y salimos
If snFechaEnUnaPagina("B2", "L501", 2, "C6") Then
snFechaEnUnaPagina "B2", "L501", 3, "C7"
Exit Sub
End If
' Si no estaba en la primera página probamos con la segunda
If snFechaEnUnaPagina("B2", "L502", 2, "E6") Then
snFechaEnUnaPagina "B2", "L502", 3, "E7"
Exit Sub
End If
' Y si no en la tercera
If snFechaEnUnaPagina("B2", "L503", 2, "G6") Then
snFechaEnUnaPagina "B2", "L503", 3, "G7"
Exit Sub
End If
' Si llega hasta aquí es que no lo ha encontrado antes. No está la fecha
' (si hubiera estado habría aparecido en alguna de las búsquedas)
MsgBox "Fecha introducida no se encuentra"
End Sub
Function snFechaEnUnaPagina(ByVal txtCeldaBuscar As String, ByVal nomPagina As String, ByVal nColSalida As Integer, ByVal txtCeldaSalida As String) As Boolean
' Busca el valor de la celda "txtCeldaBuscar" de la página "reporte". La busca en la página indicada
' en "nomPagina" y devuelve la columna "nColSalida" en la celda "txtCeldaSalida" de la página "reporte"
Dim aux As Variant
On Error Resume Next
aux = Application.WorksheetFunction.VLookup(Range("reporte!" & txtCeldaBuscar), Range(nomPagina & "!A3:R4500"), nColSalida, False)
If Err <> 0 Then aux = Null
On Error GoTo 0
If Not IsNull(aux) Then
Sheets("Reporte").Range(txtCeldaSalida) = aux
snFechaEnUnaPagina = True
Else
snFechaEnUnaPagina = False
End If
End Function

Si no te funciona como quieres sube el fichero a algún disco virtual (por ejemplo dropbox) y me mandas el enlace.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas