¿En VBA como saber que Lunes es el de la semana 1, 2, 3 del año?

Estando en el año en curso 2021 quiero una macro que me diga la fecha de todos los lunes del año.

Teniendo en cuenta que el año puede tener 52 o 53 semanas.

Hay veces que si metes el 01/01/2021 te cuenta como semana 52 cuando quiero que sea la 1.

En fin que se os ocurre para sacar todas las fechas de los lunes del año además de la semana a la que le corresponde.

3 respuestas

Respuesta
2

Vamos por partes

1º ¿Tu escribes la fecha y quieres que te diga si es lunes?

2º ¿Tu escribes la semana y quieres que te diga la fecha en que es lunes?

3º ¿Cómo y donde quieres verlo? Si, por ejemplo, abres un formulario todos los días, en sus propiedades eventos-al cargar puedes ponerle, por ejemplo, ya que hay mil formas

If format(Date(),"dddd")="lunes" then..,..

De forma que cuando lo abras y la fecha del sistema sea un lunes hará...

Las fechas, semanas, meses, años, como las ves no existen. Al día 31/12/1899 se le asignó el 0, al día 01/01/1900 se le asignó el 1, al 02/01/1900 el 2 y así hasta hoy, que estaremos por el 44.242

Si puedes concretar algo más.

Respuesta
1

Primero que todo no hay ningún año con 53 semanas y este fue un error que corrigió Microsoft al utilizar la función DatePart(), por ejemplo, si usted prueba en la ventana de inmediato y escribe:

?DatePart("ww","31/12/2021") ---- obtiene:
53

Este error fue corregido con la función que está en el link que está al final y es la función que utilizo para fijar el número de la semana de una fecha en este ejemplo.

Para este ejemplo haga lo siguiente, cree una tabla con el nombre tbllunes.

TABLA tbllunes

FORMULARIO

Cree un formulario, algo como:

Adicione un Cuadro de lista, llámelo cboPeriodo. Ingrese el código siguiente en el combo y en el evento Al Abrir del formulario:

MÓDULO DE VBA

Adicione un módulo e ingrese el siguiente código:
Función llena_periodo(). Tiene como fin llenar la tabla con las fechas que caen el día lunes y asigna el número de la semana. Requiere de la función EsBisiesto() y las funciones de MicrosoftWeekNumber() y Days()

Función EsBisiesto(). Se requiere para el control del For Next, toda vez, que se debe recorrer los días del año.

Funciones de Microsoft

Estas las puede descargar de este link:

DatePart Function - Access (microsoft.com)

NOTA: La función llena_periodo() se puede modificar para otros usos

Espero le sirva, si quieren el ejemplo los interesados lo pueden solicitar al [email protected] favor anotar en el asunto el nombre de la consulta.

Se me olvidó adicionar la imagen del resultado, es decir, la tabla

Este es resultado al seleccionar el año 2021

¡Gracias!

Excepcional a más no poder.

Sin embargo mi idea es hacerlo en Excel.

Por ejemplo ponemos en A1 el año para buscar todos los lunes... 2021.

Y con un botón que me vaya poniendo a partir de A1 la semana y en B1 la fecha de ese Lunes.

Comparto en parte la solución de Jacinto, un saludo, en el sentido de utilizar un contador para el número de la semana, en este caso sobran las funciones de Microsoft, pero se necesitarían en el caso de calcular si determinada fecha es un lunes y a que semana del año corresponde, es el caso cuando de no se llena una tabla.

El módulo le sirve también par Excel, tendría que remplazar las líneas:

DoCmd. RunSQL por su equivante en Excel, es decir, fijar valor en celda y desplazar hacia abajo, derecha etc. No lo hago porque Excel no es mi campo. Pero seguro que algún experto en Excel le pueda colaborar.

Respuesta
1

En un Formulario que tengas pones un Botón que voy a llamar>> BtnLunesAño

Private Sub BtnLunesAño_Click()
Dim StrSQL As String
Dim I As Integer
StrSQL = "DELETE * FROM TblLunesAño;"
CurrentDb.Execute StrSQL
StrSQL = ""
Dim F As Date
For F = #1/1/2021# To #12/31/2021#
            If Weekday(F) = vbMonday Then
                    I = I + 1
                    CurrentDb.Execute "INSERT INTO TblLunesAño(Orden,FechaLunes) VALUES(" & I & ",#" & Format(F, "mm/dd/yyyy") & "#)"
            End If
Next F
MsgBox "Proceso de llenar Tabla, concluido",vbInformation,"FIN PROCESO"
End Sub

Has de crear una Tabla >> TblLunesAño con dos Campos>> Orden y FechaLunes

El Orden será la semana y te debe quedar algo así:

Un saludo >> JTJ

¡Gracias! 

Excepcional, pero mi idea es hacerlo en Excel.

Por ejemplo ponemos en A1 el año para buscar todos los lunes...2021.

Y con un botón que me vaya poniendo a partir de A1 la semana y en  B1 la fecha de ese Lunes.

Disculpa, porque ahora al resaltarlo tu, me he dado cuenta que pone muy claro "Macros Excel" al Inicio. La vista se me fue a ... Access VBA. No sabría hacerlo en Excel. Un saludo >> JTJ

¡Gracias!

Aun así me has orientado muy bien.. me has dado pie a solucionarlo.

Lo miro y le doy forma.

Muchas/muchisimas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas