
SAMAEL ESTEBAN MENDOZA
-
Contador de contenido
10 -
Unido
-
Última visita
SAMAEL ESTEBAN MENDOZA's Achievements
-
Para todos los participantes del FORO EXCEL un feliz y prospero año nuevo y que Dios me los bendiga a todos ustedes. tengo un ligero problema es un archivo de ACCESS con ciertas características de análisis de datos. tengo tres cajas de texto 1) ingreso fecha; 2) ingreso días y 3) mediante comdo button me calcule incluyendo los días sábados, domingos y feriados dd/mm/yyyy ;.
el lenguaje de programación es que me calcula sin contar días festivos, sábados ni domingos:
Private Sub cmdSinSabNiDomNiFest_Click()
'---BLOQUE 1: CREACIÓN DE VARIABLES Y CONTROL DE DATOS INTRODUCIDOS-----------------
'Creamos las variables y les asignamos valor
Dim vFIni As Variant, vDias As Variant
vFIni = Me.txtFIni.Value
vDias = Me.txtDias.Value
'Controlamos que se hayan introducido valores
If IsNull(vFIni) Then
MsgBox "No se ha indicado ninguna fecha", vbInformation, "SIN FECHA"
Me.txtFIni.SetFocus
Exit Sub
End If
If IsNull(vDias) Then
MsgBox "No se han indicado los días", vbInformation, "SIN DÍAS"
Me.txtDias.SetFocus
Exit Sub
End If
'---BLOQUE DOS: BLOQUE DE PROCESO-------------------------------'Creamos las variables temporales que nos darán la base para analizar la fecha
'que vayamos obteniendo
Dim i As Integer
Dim fTmp As Date
'Inicializamos las variables fTmp
fTmp = vFIni
'Analizamos día a día la fecha temporal. Si es sábado o domingo
'o festivo obliga a realizar una iteración más a través de i=i-1
For i = 1 To vDias
'Creamos una variable temporal que nos recogerá el festivo de la tabla
Dim festEnTabla As Variant
'Comprobamos si el día de la fecha en cuestión es festivo
festEnTabla = DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")
'Si devuelve un valor no nulo es que hay coincidencia
'En este caso nos movemos a la fecha siguiente y forzamos una nueva reiteración
If Not IsNull(festEnTabla) Then
fTmp = fTmp + 1
i = i - 1
'Si no es festivo analizamos si es sábado o domingo
Else
'Si es sábado o domingo nos movemos
'a la fecha siguiente y forzamos una nueva reiteración
If Weekday(fTmp) = vbSaturday Or Weekday(fTmp) = vbSunday Then
fTmp = fTmp + 1
i = i - 1
'Si no lo es, nos movemos a la fecha siguiente
Else
fTmp = fTmp + 1
End If
End If
Next
'---BLOQUE TRES: ANÁLISIS DEL ÚLTIMO DÍA OBTENIDO----------------------------'Creamos el bloque que analizará el último día
For i = 1 To 1
'Si el día es festivo nos movemos al día siguiente y forzamos una nueva reiteración
festEnTabla = DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")
If Not IsNull(festEnTabla) Then
fTmp = fTmp + 1
i = i - 1
'Si no es festivo miramos si es sábado o domingo
Else
'Si es sábado o domingo nos movemos al día siguiente y forzamos una nueva reiteración
If Weekday(fTmp) = vbSaturday Or Weekday(fTmp) = vbSunday Then
fTmp = fTmp + 1
i = i - 1
End If
End If
Next
'---BLOQUE CUATRO: ASIGNACIÓN DEL RESULTADO OBTENIDOMe.txtSinSabNiDomNiFest.Value = fTmp
End Sub
-
Muy buenos días a todos los integrantes del FORO AYUDA EXCEL, encontré un archivo de access que permite sumar sin incluir los días sábados, domingos y feriados pero lo que quiero es que SUME LOS DÍAS SÁBADOS Y DOMINGOS PERO NO LOS DÍAS FERIADOS, agradezco por anticipado a toda la comunidad de ayuda excel por sus valiosos aportes...este es su lenguaje de programación y es de archivo access.
Private Sub cmdSinSabNiDomNiFest_Click()
'---BLOQUE 1: CREACIÓN DE VARIABLES Y CONTROL DE DATOS INTRODUCIDOS-----------------
'Creamos las variables y les asignamos valor
Dim vFIni As Variant, vDias As Variant
vFIni = Me.txtFIni.Value
vDias = Me.txtDias.Value
'Controlamos que se hayan introducido valores
If IsNull(vFIni) Then
MsgBox "No se ha indicado ninguna fecha", vbInformation, "SIN FECHA"
Me.txtFIni.SetFocus
Exit Sub
End If
If IsNull(vDias) Then
MsgBox "No se han indicado los días", vbInformation, "SIN DÍAS"
Me.txtDias.SetFocus
Exit Sub
End If
'---BLOQUE DOS: BLOQUE DE PROCESO-------------------------------'Creamos las variables temporales que nos darán la base para analizar la fecha
'que vayamos obteniendo
Dim i As Integer
Dim fTmp As Date
'Inicializamos las variables fTmp
fTmp = vFIni
'Analizamos día a día la fecha temporal. Si es sábado o domingo
'o festivo obliga a realizar una iteración más a través de i=i-1
For i = 1 To vDias
'Creamos una variable temporal que nos recogerá el festivo de la tabla
Dim festEnTabla As Variant
'Comprobamos si el día de la fecha en cuestión es festivo
festEnTabla = DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")
'Si devuelve un valor no nulo es que hay coincidencia
'En este caso nos movemos a la fecha siguiente y forzamos una nueva reiteración
If Not IsNull(festEnTabla) Then
fTmp = fTmp + 1
i = i - 1
'Si no es festivo analizamos si es sábado o domingo
Else
'Si es sábado o domingo nos movemos
'a la fecha siguiente y forzamos una nueva reiteración
If Weekday(fTmp) = vbSaturday Or Weekday(fTmp) = vbSunday Then
fTmp = fTmp + 1
i = i - 1
'Si no lo es, nos movemos a la fecha siguiente
Else
fTmp = fTmp + 1
End If
End If
Next
'---BLOQUE TRES: ANÁLISIS DEL ÚLTIMO DÍA OBTENIDO----------------------------'Creamos el bloque que analizará el último día
For i = 1 To 1
'Si el día es festivo nos movemos al día siguiente y forzamos una nueva reiteración
festEnTabla = DLookup("[DFest]", "TFestivos", "[DFest]=#" & Format(fTmp, "mm/dd/yy") & "#")
If Not IsNull(festEnTabla) Then
fTmp = fTmp + 1
i = i - 1
'Si no es festivo miramos si es sábado o domingo
Else
'Si es sábado o domingo nos movemos al día siguiente y forzamos una nueva reiteración
If Weekday(fTmp) = vbSaturday Or Weekday(fTmp) = vbSunday Then
fTmp = fTmp + 1
i = i - 1
End If
End If
Next
'---BLOQUE CUATRO: ASIGNACIÓN DEL RESULTADO OBTENIDOMe.txtSinSabNiDomNiFest.Value = fTmp
End Sub