Excel - Ayuda al ejecutar macro la fecha no cambia

 
Vista:
sin imagen de perfil

Ayuda al ejecutar macro la fecha no cambia

Publicado por Cristhian (1 intervención) el 10/10/2021 02:33:41
Amigos

necesito ayuda, tengo esta macro que del archivo original resulta, yo tengo el año, tengo el mes, pero al hacer correr la macro resulta que no me actualiza las fechas
la macro es la siguiente
Sub modificar_datos_fechas_tabla()

Dim y%, m, a, i%, n%, fu As Date, uF As Date
For i = 0 To 30
[yDIA].Offset(, i) = ""
[yDIA].Offset(-1, i) = ""
Next

y = [xAño]
m = [xMes]
a = Array("ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE")

For i = 1 To UBound(a)
If a(i) = m Then Exit For
Next

n = i
fu = CDate("1/" & n & "/" & y)
uF = fu + 30

Application.ScreenUpdating = False

i = 0
a = Array("LU", "MA", "MI", "JU", "VI", "SA", "DO")
For f = fu To uF
If Month(f) <> n Then Exit For
[yDIA].Offset(, i) = f
[yDIA].Offset(-1, i) = a(Weekday(f, vbMonday))
i = i + 1
Next


Application.ScreenUpdating = True
End Sub
por favor si me pueden ayudar, ya que al actualizar no me funciona, yo cambio el mes o el año, deberia salir los dias o mejor dicho la fecha de acuerdo al año y mes

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfredo
Val: 363
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ayuda al ejecutar macro la fecha no cambia

Publicado por Alfredo (120 intervenciones) el 10/10/2021 18:28:21
Hola Cristhian

Viendo tu código veo que creas matrices para los meses y días de la semana, mas no contemplas que todos los arreglos inician con el indice "0" (cero) y no existe el día 0 ni el mes 0, prueba escribiendo al inicio del modulo la palabra clave "Option Base 1" para que todos tus arreglos inicien con el indice 1 en lugar del cero

Nos comentas los resultados

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ayuda al ejecutar macro la fecha no cambia

Publicado por Antoni Masana (2477 intervenciones) el 11/10/2021 15:56:22
Con respeto a al que comenta Alfredo tienes dos formas de solucionar el problema

Opcion 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub modificar_datos_fechas_tabla()
 
    Dim y%, m, a, i%, n%, fu As Date, uF As Date
 
    For i = 0 To 30
        [yDIA].Offset(, i) = ""
        [yDIA].Offset(-1, i) = ""
    Next
 
    y = [xAño]
    m = [xMes]
    ' Elemento 0    Elemento 1
    '          V    V
    a = Array("", "ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE")
 
    For i = 1 To UBound(a)
        If a(i) = m Then Exit For
    Next
 
    n = i
    fu = CDate("1/" & n & "/" & y)
    uF = fu + 30
 
    Application.ScreenUpdating = False
 
    i = 0
    a = Array("", "LU", "MA", "MI", "JU", "VI", "SA", "DO")
    For f = fu To uF
        If Month(f) <> n Then Exit For
        [yDIA].Offset(, i) = f
        [yDIA].Offset(-1, i) = a(Weekday(f, vbMonday))
        i = i + 1
    Next
    Application.ScreenUpdating = True
End Sub

Opción 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Base 1
 
Sub modificar_datos_fechas_tabla()
 
    Dim y%, m, a, i%, n%, fu As Date, uF As Date
 
    For i = 0 To 30
        [yDIA].Offset(, i) = ""
        [yDIA].Offset(-1, i) = ""
    Next
 
    y = [xAño]
    m = [xMes]
    a = Array("ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE")
 
    For i = 1 To UBound(a)
        If a(i) = m Then Exit For
    Next
 
    n = i
    fu = CDate("1/" & n & "/" & y)
    uF = fu + 30
 
    Application.ScreenUpdating = False
 
    i = 0
    a = Array("LU", "MA", "MI", "JU", "VI", "SA", "DO")
    For f = fu To uF
        If Month(f) <> n Then Exit For
        [yDIA].Offset(, i) = f
        [yDIA].Offset(-1, i) = a(Weekday(f, vbMonday))
        i = i + 1
    Next
 
 
    Application.ScreenUpdating = True
End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar