Macro para obtener los días no laborables entre dos fechas

Tengo un código que no he podido hacerlo funcionar, lo que requiero es obtener los días de vacaciones entre dos fechas usando la función NetworkDays. INTL, los datos a comparar son bastantes y necesito hacer el barrido con código. Esto es lo que tengo:

 Dim fi As Date
 Dim ff As Date
 rn = "A6:A32" ' Rango de festivos
 fi = Cells(15, "L").Value ' Fecha inicial
 ff = Cells(15, "M").Value ' Fecha final
 v = NetworkDays. INTL(fi, ff, 11, rn) ' numero de días de vacaciones

Cuando lo ejecuto aparece un error: "Se requiere objeto".

3 respuestas

Respuesta
1

Primero déjame entender lo que necesitas, quieres los días NO laborables o los días hábiles.

Si tienes excel 2007, esa función no existe, tendrás que utilizar una función que desarrollaron para 2007, puedes encontrarla en este enlace:

http://www.mrexcel.com/forum/excel-questions/554969-need-visual-basic-applications-code-networkdays-intl-use-excel-2007-a.html 

Por el mensaje de error presumo que tienes versión 2007. Entonces hay que buscar otra alternativa.

Perdón Dante no me expliqué bien... quiero obtener los días hábiles para programar vacaciones, y solo necesito entender como usar en VBA la fórmula :

NetworkDays.INTL(fechaiinicial, fechafinal, 11, [Rango de festivos])

Tengo Excel 2013 y la función puedo usarla como fórmula, pero la necesito en VBA para ponerle varables.

Saludos.

El parámetro 11 (once) es el correcto, es decir, los días inhábiles para tí, ¿solamente son los domingos?

Vamos a probar las siguientes:

Sub x()
    rn = "A6:A32" ' Rango de festivos
    fi = Cells(15, "L").Value ' Fecha inicial
    ff = Cells(15, "M").Value ' Fecha final
    v = Application.NetworkDays.INTL(fi, ff, 11, Range(rn))
End Sub

otra:

Sub w()
    rn = "A6:A32" ' Rango de festivos
    fi = Cells(15, "L").Value ' Fecha inicial
    ff = Cells(15, "M").Value ' Fecha final
    v = Evaluate("=NetworkDays.INTL(L15, M15, 11," & rn & ")")
End Sub

Si los sábados y domingos son inhábiles, entonces puede ser así:

Sub m()
    rn = "A6:A32" ' Rango de festivos
    fi = Cells(15, "L").Value ' Fecha inicial
    ff = Cells(15, "M").Value ' Fecha final
    v = Application.NetworkDays(fi, ff, Range(rn))
End Sub

Dime cuál te funciona o cuál necesitas y te ayudo para ponerlo en un ciclo y hacerlo con varias celdas

Respuesta

Prueba con:

 Dim fi As Date
 Dim ff As Date
 rn = "A6:A32" ' Rango de festivos
 fi = Cells(15, "L").Value ' Fecha inicial
 ff = Cells(15, "M").Value ' Fecha final
 v = Application.WorksheetFunction.NetworkDays_Intl(fi, ff, 11, rn) ' numero de días de vacaciones

No estoy seguro que funcione el rango de festivos de la forma que lo declaraste, en caso que falle reemplaza esa instrucción por

Set rn = Sheets("Hoja1").Range("A6:A32")

Ajusta el nombre de la "Hoja1" por el que corresponda

Respuesta

Descargue e instale el manual y ejemplos para Access y Excel del siguiente link:

Encontrará la solución y muchas cosas más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas