On Error Resume Next/ GoTo con la función VLOOKUP para varios elementos

Tengo el siguiente código, lo que trato de hacer es un horario donde del día y hora deberá aparecer en un Userform solo si hay una clase, pero el problema es que cuando uso la función VLOOKUP cuando no hay valor manda error, Intente usar la función On Error Resume Next, pero no resulto bien, lo que quiero es que donde aparezca un error ponga un espacio en blanco o que no aparezca nada.

Algo así, solo que aquí lo rellene usando la propiedad Caption

Ejemplo: El día martes el VLOOKUP debe mostrar alas 10:00 la materia de arte, historia y cultura, pero el mismo dia a las 07:00 en el label marcaría un error, pero quiero no pongo nada dejarlo en blanco, pero el lunes a las 07:00 si debe de aparecer algo. AYUDA! Nota es un Userform

Private Sub UserForm_Activate()

'color para el horario MATERIAS

LBM1 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(5, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

LBM2 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(6, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)
LBM3 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(7, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

LBM4 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(8, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

LBM5 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(9, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

LBM6 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(10, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)LBM7 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(11, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

LBM8 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(12, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

LBM9 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(13, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)
LBM10 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(14, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)
LBM11 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(15, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

LBM12 = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(16, 6).Value), Sheets("Parametros").Range("O2:R22"), 4, 0)

End sub

2 Respuestas

Respuesta
1

Las funciones WorkSheetFunction son funciones que Excel le presta a VBA, pero al ser administradas por este objeto, ante un error (como ocurre en VBA) detiene la macro...

El truco para arreglar esto se consigue en dos partes...

1)

En Excel tu pondrias algo asi para lograr lo que quieres

=SI.ERROR( BUSCARV( algo, rango, ncol, falso), "") 

En VBA por tanto debe poner DOS funciones...

Application. WorkSheetFunction.IFERROR... y dentro de esta

Application. WorkSheetFunction. VLOOKUP, con estructura similar a lo que harías en Excel..,.

Esto quedaría algo como

LBM1 =

Application. WorksheetFunction. IfError( Application. WorksheetFunction. VLookup(Application. WorksheetFunction. Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(5, 6). Value), Sheets("Parametros").Range("O2:R22"), 4, 0)  ,  "")

Pero esto contra lo que uno podría pensar no funciona... pues ANTES que IFERROR reciba el valor y por lo tanto decida mostrar "" ... VLOOKUP detiene la macro...

2)

La segunda parte consiste en engañar o esquivar a VBA... para que no frene la ejecución... y para eso hay que "esquivar" el objeto WorkSheetFunction en el VLOOKUP... es decir no escribirlo...

LBM1 =

Application. WorksheetFunction. IfError( Application. VLookup(Application. WorksheetFunction. Concat(Weekday(Date, vbMonday), Worksheets("Inicio").Cells(5, 6). Value), Sheets("Parametros").Range("O2:R22"), 4, 0)  ,  "")

Con eso VLOOKUP consigue enviar su "error" y el IfError con eso decide mostrar el ""

Saludos,

Jaime

PD: No olvides valorar la respuesta

Respuesta
1

La instrucción es:

on error resume next

LBM10 =worksheetfunction.vlookup(.....)

if err.number>0 then lbm10=empty

on error goto 0

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas