Come si determina l'ora legale in VBA?
-
02-07-2019 - |
Domanda
Quale funzione ci farà sapere se una data in VBA è in ora legale o meno?
Soluzione
Per le date non correnti (DST 2007+):
Innanzitutto, è necessaria una funzione per trovare il numero di giorni della settimana specifici in un mese:
Public Function NDow(Y As Integer, M As Integer, _
N As Integer, DOW As Integer) As Date
' Returns Date of Nth Day of the Week in Month
NDow = DateSerial(Y, M, (8 - Weekday(DateSerial(Y, M, 1), _
(DOW + 1) Mod 8)) + ((N - 1) * 7))
End Function
Quindi, è possibile verificare il giorno dell'ora legale rispetto alle seguenti chiamate di funzione:
Autunno: NDow (Anno (nuova data), 11, 1, 1)
Primavera: NDow (Anno (nuova data), 3, 2, 1)
Per la data corrente:
Chiama la funzione API di Windows GetTimeZoneInformation, e restituirà un enum (intero) con lo stato.
Ho ottenuto il codice per questo dal fantastico sito Excel di Chip Pearson.
Altri suggerimenti
Per chiunque si chiedesse come rendere conto dell'ora legale in Europa (ora dell'Europa centrale), ho modificato lo script da Chip Pearson . L'ultima domenica di marzo (dalle 2 alle 3 del mattino) e ottobre (dalle 3 alle 2 del mattino) sono i giorni in cui si verifica la commutazione dell'ora.
Il seguente codice è l'evento click di un pulsante in Excel:
Dim dates As String
dates = "A1:A20"
For Each c In Worksheets("Sheet1").Range(dates).Cells
If (IsDateWithinDST(c.Value)) Then
c.Value = DateAdd("h", 1, c.Value)
End If
Next
Il modulo contenente i metodi necessari si trova qui .