Macro usando worksheetfunction

30/06/2005 - 15:28 por Diego | Informe spam
Tengo un problema con 2 funciones de worksheetfunction.

1° VLookup
Necesito buscar valor dentro de un rango de datos (2 columnas) como parte de
una macro.
La hacer la prueba y emplear la sgte línea:

Sub prueba()
Cells(1, 2) = Application.WorksheetFunction.VLookup(Cells(1, 1),
Worksheets("Tablas").Range("A1:B51"), 2, False)
End Sub

Funciona correctamente, luego quiero reemplazar los datos fijos por
variables, y empleo la sgte linea dentro de un bucle for:

Cells(i, 24) = Application.WorksheetFunction.VLookup(Cells(i, 23),
Worksheets("Tablas").Range("A1:B51"), 2, False)

Cuando llega la macro a esta línea me arroja el sgte error:
"Se ha producido un error 1004 en tiempo de ejecución
Imposible obtener la propiedad VLookup de la clase WorksheetFunction"

2° SumIf
En el mismo bucle tengo otras líneas con la función SumIf.

Cells(i, 31) =
Application.WorksheetFunction.SumIf(Worksheets("DB_Mod").Range(Cells(1, 1),
Cells(1, 186)), "CV", Sheets("DB_Mod").Range(Cells(i, 1), Cells(i, 186)))

y el error que me arroja es:

"Se ha producido un error 1004 en tiempo de ejecución
Error definido por la aplicación o el objeto"

Gracias de antemano.
 

Leer las respuestas

#1 KL
30/06/2005 - 16:18 | Informe spam
Hola Diego,


Cells(i, 24) = Application.WorksheetFunction.VLookup(Cells(i, 23),
Worksheets("Tablas").Range("A1:B51"), 2, False)

Cuando llega la macro a esta linea me arroja el sgte error:
"Se ha producido un error 1004 en tiempo de ejecucion
Imposible obtener la propiedad VLookup de la clase WorksheetFunction"



Esta instruccion te dara error si el valor de la celda Cells(i, 23) de la
hoja activa no se encuentra en la tabla
Worksheets("Tablas").Range("A1:B51"). Igual que la formula
=BUSCARV(W1;Tablas!$A$1:$B$51,2,False) te devolveria ?#N/A! si no encontrase
el valor W1.

2œ SumIf
Cells(i, 31) > Application.WorksheetFunction.SumIf(Worksheets("DB_Mod").Range(Cells(1,
1),
Cells(1, 186)), "CV", Sheets("DB_Mod").Range(Cells(i, 1), Cells(i, 186)))
"Se ha producido un error 1004 en tiempo de ejecucion
Error definido por la aplicacion o el objeto"



Aqui construyes incorrectamente tus rangos:

Worksheets("DB_Mod").Range(Cells(1, 1),Cells(1, 186))

Lo que hace la instruccion de arriba es intentar definir un rango en la hoja
DB_Mod usando celdas de la hoja activa. Es decir, lo correcto seria:

Worksheets("DB_Mod").Range(Worksheets("DB_Mod").Cells(1,
1),Worksheets("DB_Mod").Cells(1, 186))

o bien

With Worksheets("DB_Mod")
.Range(.Cells(1, 1),.Cells(1, 186))
End With

Total que podrias probar el siguiente codigo:

Sub test()
For i = 2 To 10
On Error Resume Next
Cells(i, 24) = WorksheetFunction.VLookup(Cells(i, 23), _
Worksheets("Tablas").Range("A1:B51"), 2, False)
On Error GoTo 0

With Worksheets("DB_Mod")
Cells(i, 31) = _
WorksheetFunction.SumIf(.Range(.Cells(1, 1), _
.Cells(1, 186)), "CV", .Range(.Cells(i, 1), _
.Cells(i, 186)))
End With
Next i
End Sub

Saludos,
KL

Preguntas similares