none
Pregunta sobre FOR

    Pregunta

  • Hola, me preguntaba si es posible hacer un FOR que tenga limites variables.

    Lo que necesito que haga es saber la fecha de retorno de vacaciones dada una fecha de inicio y la cantidad de días hábiles que ha tomado la persona. El código lo tengo de esta forma:

    For j = 1 To dia
                If Weekday(DateAdd("d", j - 1, fechainicio), vbMonday) = 7 Then '¿es domingo?
                    dia = dia + 1
                ElseIf Weekday(DateAdd("d", j - 1, fechainicio), vbMonday) = 6 Then '¿es sabado?
                    dia = dia + 1
                    
                End If
            Next

    donde "día" es una variable ingresada por el usuario. La idea es que si el usuario ingresa 15, entonces la cantidad de días de corrido serían 21 (suponiendo que no hay días festivos entremedio). Por ejemplo, si estamos al 1/03/2017 y el usuario ha ingresado 15, quiero que me devuelva 21/03/2017.

    La idea que tengo del FOR es que por cada sábado y domingo que haya, le sume 1 al límite superior y que continúe hasta que j valga el valor de "dia", pero lo que esta ocurriendo es que j va desde 1 hasta 15 (o cualquier otro valor que haya sido ingresado en un principio).

    La pregunta en cuestión es: ¿se puede hacer que j llegue más allá del valor ingresado por el usuario de esta forma? si no, ¿cómo lo puedo hacer? ¿existe algún método más fácil para hacer esto mismo de otra forma?

    Saludos y gracias.

    jueves, 23 de marzo de 2017 20:06

Respuestas

  • Puedes sustituir el For por un While:

    j = 1
    While j < dia
                j = j + 1
                If Weekday(DateAdd("d", j - 1, fechainicio), vbMonday) = 7 Then '¿es domingo?
                    dia = dia + 1
                ElseIf Weekday(DateAdd("d", j - 1, fechainicio), vbMonday) = 6 Then '¿es sabado?
                    dia = dia + 1
                End If
    End While

    • Propuesto como respuesta Metaconta viernes, 24 de marzo de 2017 8:40
    • Marcado como respuesta ppsev viernes, 24 de marzo de 2017 12:45
    jueves, 23 de marzo de 2017 21:30

Todas las respuestas

  • Puedes sustituir el For por un While:

    j = 1
    While j < dia
                j = j + 1
                If Weekday(DateAdd("d", j - 1, fechainicio), vbMonday) = 7 Then '¿es domingo?
                    dia = dia + 1
                ElseIf Weekday(DateAdd("d", j - 1, fechainicio), vbMonday) = 6 Then '¿es sabado?
                    dia = dia + 1
                End If
    End While

    • Propuesto como respuesta Metaconta viernes, 24 de marzo de 2017 8:40
    • Marcado como respuesta ppsev viernes, 24 de marzo de 2017 12:45
    jueves, 23 de marzo de 2017 21:30
  • Fue exactamente lo que hice. Gracias Alberto!
    viernes, 24 de marzo de 2017 12:45