È un baco risaputo.
Questa restituisce il valore corretto secondo le indicazioni MS.
Public Function Date2Week(Optional dtmDate As Variant) As Byte
' ------------------------------------------------------
' Calcolo formato ISO 8601:1988 standard
' Verificati i casi da KB [OK]
' https://support.microsoft.com/it-it/kb/200299
' ------------------------------------------------------
Dim Jan1 As Date
Dim Sub1 As Boolean
Dim Ret As Byte
If IsMissing(dtmDate) Then
Jan1 = DateSerial(year(Date), 1, 1)
Else
Jan1 = DateSerial(year(dtmDate), 1, 1)
End If
Sub1 = (Format(Jan1, "ww", VBA.VbDayOfWeek.vbUseSystemDayOfWeek, VBA.VbFirstWeekOfYear.vbUseSystem) = 1)
Ret = DatePart("ww", dtmDate, VBA.VbDayOfWeek.vbUseSystemDayOfWeek, VBA.VbFirstWeekOfYear.vbUseSystem) + Sub1
Date2Week = Ret
End Function