Rangos

Hola. Me comunico con uds para preguntar lo siguiente:
Estoy haciendo una función en VBScript dentro de Excel y necesito seleccionar o hacer referencia a un rango para la función VLookup. Ya probé con una variable definida como RANGE, y con la siguiente estructura
Dim datos as range
datos = Sheets("DATOS1").Range("B5:AK9399")
Y cuando llega a esa linea, se interrumpe la ejecución... ¿Me podes ayudar?
Gracias

1 Respuesta

Respuesta
1
Si una variable es definida como Rango la inicialización de la misma se realiza con el comando "Set"
Hice esta prueba, y funciona correcxtamente:
Sub testRange()
Dim datos As Range
Sheets("DATOS1").Select
Set datos = Range("B5:AK9399")
datu = "IFR0030307"
a = Application.WorksheetFunction.VLookup(datu, datos, 2, 0)
End Sub
Esto debería resolver tu pregunta. Si así fuera, agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.
aclarando qué entendí mal o qué faltó.
Desde ya te agradezco que me hayas contestado. Lo del Set se me paso, pero igualmente cuando llega a la linea del VLookup interrumpe la ejecución. Te muestro el programa:
Public Function Buscando(celdanum As String) As Integer
Dim datos1, datos2 As Range
acum = 1
mesant = mesactual - acum
mesactual = Sheets("DATOS").Range("A2")
celda = Range(celdanum)
Sheets("DATOS").Select
Set datos1 = Range("AN6:AO17")
Set datos2 = Range("B5:AK9399")
Do While acum < mesactual Or acum = mesactual
colum = Application.WorksheetFunction.VLookup(mesactual, datos1, 2, 0) - mesant 'En esta linea es cuando se tilda
resulmes = Application.WorksheetFunction.VLookup(celda, datos2, colum)
acum = acum + 1
resultado = resultado + resulmes
Loop
Buscando = resultado
End Function
Decime en que me equivoque o por que no me funciona, por favor... Gracias
Fíjate en esta secuencia:
acum = 1
mesant = mesactual - acum
mesactual = Sheets("DATOS").Range("A2")
Mesactual es usada ANTES de inicializarla.
Prueba con:
acum = 1
mesactual = Sheets("DATOS").Range("A2")
mesant = mesactual - acum
Me parece que esto es lo que causa tu problema.
Te agradezco mucho que le des tanta bolilla a mi problema, y te pido disculpas por lo cargoso. La solución que me mandaste ya la había probado un ratito después de que te mande el programa, y no, no es eso. Fíjate a ver si juntos podemos encontrarle la vuelta.
La verdad que me resulta difícil interpretar qué quieres hacer a partir de tu código. (En realidad creo que debe haber una forma más simple de resolverlo)
Sin embargo armé una planilla de MS Excel con los datos que usa tu macro y estimo que el error se produce cuando hay una búsqueda fallida en el primer BUSCARV (vlookup) que utilizas.
Entonces modifiqué tu código, agregando las recomendaciones anteriores, y armé el siguiente, que "atrapa" el error y lo informa en un mensaje. De todas maneras, creo que con esta subrutina de error podrás manejar lo que quieres que devuelva la función cunado un valor no es encontrado en el rango AN6:AO17. SI el dato es encontrado la función culmina sin detenerse.
Prueba, entonces, este código:
Public Function Buscando(celdanum As String) As Integer
Dim datos1, datos2 As Range
acum = 1
mesactual = Sheets("DATOS").Range("A2")
mesant = mesactual - acum
Set celda = Range(celdanum)
Sheets("DATOS").Select
Set datos1 = Range("AN6:AO17")
Set datos2 = Range("B5:AK9399")
resultado = 0
On Error GoTo TellErr1
Do While acum <= mesactual
Q_VLOOK = "PRIMER"
colum = Application.WorksheetFunction.VLookup(mesactual, datos1, 2, 0) - mesant 'En esta linea es cuando se tilda ____ si no encuentra un caso positivo
Q_VLOOK = "SEGUNDO"
resulmes = Application.WorksheetFunction.VLookup(celda, datos2, colum)
acum = acum + 1
resultado = resultado + resulmes
Q_VLOOK = ""
Loop
Buscando = resultado
Exit Function
TellErr1:
MsgBox "Error # " & Str(Err.Number) & " fue generado por " & Err.Source & Chr(10) & Err.Description, vbCritical, "ERROR EN " & Q_VLOOK & " BUSCARV"
End Function
Luego me avisas cómo te fue.
Fernando:
No tengo palabras para agradecerte. Igualmente ayer a la tarde lo hice andar después de 20.546 pruebas. Resulta que la matriz del primer VLookup estaba mal ordenada... Igualmente te agradezco mucho y obviamente por el esfuerzo y por lo buen tipo, allá va un excelente
Un abrazo
ARIEL

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas