Ver Mensaje Individual
  #8 (permalink)  
Antiguo 09/03/2009, 05:02
Avellaneda
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 17 años, 2 meses
Puntos: 37
Respuesta: Detectar el numero de la semana actual

Hola, el ejemplo que te pusieron antes creo que no resuelve el problema ya que no cuenta las semanas completas del mes. p.e. 01/08/2009 devuelve 1 cuando debería devolver la última semana del mes anterior ya que ése día es sábado.
Y aunque así fuera, si pones 30/08/2009 devuelve la semana 6 (¿?).

Prueba con esta función:

Código Visual Basic:
Ver original
  1. Function NumeroSemanaMes(ByVal dFecha As Date) As Integer
  2. Dim iSemanaActual As Integer, iSemanaAnterior As Integer, iRes As Integer
  3. ' calculamos el número de semana del año de la fecha actual
  4. iSemanaActual = DatePart("ww", dFecha, vbMonday, vbFirstFourDays)
  5. ' calculamos el último día del mes anterior y su número de semana
  6. dFecha = DateSerial(Year(dFecha), Month(dFecha), 0)
  7. iSemanaAnterior = DatePart("ww", dFecha, vbMonday, vbFirstFourDays)
  8. ' por diferencia, sacamos la semana actual del mes en curso
  9. iRes = iSemanaActual - iSemanaAnterior
  10. ' si es cero es que la semana es la última del mes anterior, repetimos el ciclo
  11. If iRes = 0 Then
  12.     ' la variable dFecha ahora es el último día del mes anterior
  13.     iSemanaActual = DatePart("ww", dFecha, vbMonday, vbFirstFourDays)
  14.     dFecha = DateSerial(Year(dFecha), Month(dFecha), 0)
  15.     iSemanaAnterior = DatePart("ww", dFecha, vbMonday, vbFirstFourDays)
  16.     iRes = iSemanaActual - iSemanaAnterior
  17. End If
  18. NumeroSemanaMes = iRes
  19. End Function

Para llamarla, p.e. desde un CommandButton:

Código Visual Basic:
Ver original
  1. Private Sub Command1_Click()
  2. MsgBox NumeroSemanaMes("01/08/2009")
  3. 'Si es la fecha actual: MsgBox NumeroSemanaMes(Date)
  4. End Sub

Saludos