Ricerca…


Calendario

VBA supporta 2 calendari: Gregorian e Hijri

La proprietà Calendar viene utilizzata per modificare o visualizzare il calendario corrente.

I 2 valori per il calendario sono:

Valore Costante Descrizione
0 vbCalGreg Calendario gregoriano (predefinito)
1 vbCalHijri Calendario Hijri

Esempio

Sub CalendarExample()
    'Cache the current setting.
    Dim Cached As Integer
    Cached = Calendar

    ' Dates in Gregorian Calendar
    Calendar = vbCalGreg
    Dim Sample As Date
    'Create sample date of 2016-07-28
    Sample = DateSerial(2016, 7, 28)

    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    ' Date in Hijri Calendar
    Calendar = vbCalHijri
    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    'Reset VBA to cached value.
    Cached = Calendar
End Sub

Questo Sub stampa quanto segue;

Current Calendar : 0
SampleDate = 2016-07-28
Current Calendar : 1
SampleDate = 1437-10-23

Funzioni di base

Recupera il sistema DateTime

VBA supporta 3 funzioni integrate per recuperare la data e / o l'ora dall'orologio del sistema.

Funzione Tipo di reso Valore di ritorno
Adesso Data Restituisce la data e l'ora correnti
Data Data Restituisce la parte di data della data e ora correnti
Tempo Data Restituisce la porzione di tempo della data e ora correnti
Sub DateTimeExample()

    ' -----------------------------------------------------
    ' Note : EU system with default date format DD/MM/YYYY
    ' -----------------------------------------------------
    
    Debug.Print Now   ' prints 28/07/2016 10:16:01 (output below assumes this date and time)
    Debug.Print Date  ' prints 28/07/2016
    Debug.Print Time  ' prints 10:16:01
    
    ' Apply a custom format to the current date or time
    Debug.Print Format$(Now, "dd mmmm yyyy hh:nn")  ' prints 28 July 2016 10:16
    Debug.Print Format$(Date, "yyyy-mm-dd")         ' prints 2016-07-28
    Debug.Print Format$(Time, "hh") & " hour " & _
                Format$(Time, "nn") & " min " & _
                Format$(Time, "ss") & " sec "       ' prints 10 hour 16 min 01 sec
    
End Sub

Funzione timer

La funzione Timer restituisce un singolo che rappresenta il numero di secondi trascorsi da mezzanotte. La precisione è un centesimo di secondo.

Sub TimerExample()

    Debug.Print Time    ' prints 10:36:31  (time at execution)
    Debug.Print Timer   ' prints 38191,13  (seconds since midnight)

End Sub

Poiché le funzioni Now e Time sono precise solo a secondi, Timer offre un modo conveniente per aumentare la precisione della misurazione del tempo:

Sub GetBenchmark()
       
    Dim StartTime  As Single
    StartTime = Timer       'Store the current Time
    
    Dim i As Long
    Dim temp As String
    For i = 1 To 1000000    'See how long it takes Left$ to execute 1,000,000 times
        temp = Left$("Text", 2)
    Next i
    
    Dim Elapsed As Single
    Elapsed = Timer - StartTime
    Debug.Print "Code completed in " & CInt(Elapsed * 1000) & " ms"

End Sub

IsDate ()

IsDate () verifica se un'espressione è una data valida o meno. Restituisce un Boolean .

Sub IsDateExamples()

    Dim anything As Variant
       
    anything = "September 11, 2001"

    Debug.Print IsDate(anything)    'Prints True
            
    anything = #9/11/2001#

    Debug.Print IsDate(anything)    'Prints True
   
    anything = "just a string"

    Debug.Print IsDate(anything)    'Prints False

    anything = vbNull
    
    Debug.Print IsDate(anything)    'Prints False
    
End Sub

Funzioni di estrazione

Queste funzioni prendono una Variant che può essere convertita in una Date come parametro e restituisce un Integer rappresenta una porzione di una data o un'ora. Se il parametro non può essere convertito in una Date , si verificherà un errore di run-time 13: tipo mancata corrispondenza.

Funzione Descrizione Valore restituito
Anno() Restituisce la parte dell'anno dell'argomento della data. Intero (da 100 a 9999)
Mese() Restituisce la parte del mese dell'argomento della data. Intero (da 1 a 12)
Giorno() Restituisce la parte del giorno dell'argomento della data. Intero (da 1 a 31)
Giorno della settimana () Restituisce il giorno della settimana dell'argomento della data. Accetta un secondo argomento opzionale che definisce il primo giorno della settimana Intero (da 1 a 7)
Ora() Restituisce la parte dell'ora dell'argomento della data. Numero intero (da 0 a 23)
Minute () Restituisce la parte dei minuti dell'argomento della data. Intero (da 0 a 59)
Secondo() Restituisce la seconda parte dell'argomento della data. Intero (da 0 a 59)

Esempi:

Sub ExtractionExamples()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56

    Debug.Print Year(MyDate)                           ' prints 2016
    Debug.Print Month(MyDate)                          ' prints 7
    Debug.Print Day(MyDate)                            ' prints 28
    Debug.Print Hour(MyDate)                           ' prints 12
    Debug.Print Minute(MyDate)                         ' prints 34
    Debug.Print Second(MyDate)                         ' prints 56
    
    Debug.Print Weekday(MyDate)                        ' prints 5
    'Varies by locale - i.e. will print 4 in the EU and 5 in the US
    Debug.Print Weekday(MyDate, vbUseSystemDayOfWeek)
    Debug.Print Weekday(MyDate, vbMonday)              ' prints 4
    Debug.Print Weekday(MyDate, vbSunday)              ' prints 5
    
End Sub

Funzione DatePart ()

DatePart() è anche una funzione che restituisce una parte di una data, ma funziona in modo diverso e consente più possibilità rispetto alle funzioni precedenti. Può ad esempio restituire il trimestre dell'anno o la settimana dell'anno.

Sintassi:

DatePart ( interval, date  [, firstdayofweek] [, firstweekofyear] )

l' argomento intervallo può essere:

Intervallo Descrizione
"Aaaa" Anno (da 100 a 9999)
"Y" Giorno dell'anno (da 1 a 366)
"M" Mese (da 1 a 12)
"Q" Trimestre (da 1 a 4)
"Ww" Settimana (da 1 a 53)
"W" Giorno della settimana (da 1 a 7)
"D" Giorno del mese (da 1 a 31)
"H" Ora (da 0 a 23)
"N" Minuto (da 0 a 59)
"S" Secondo (da 0 a 59)

firstdayofweek è facoltativo. è una costante che specifica il primo giorno della settimana. Se non specificato, vbSunday è assunto.

la prima settimana di vita è facoltativa. è una costante che specifica la prima settimana dell'anno. Se non specificato, si presume che la prima settimana sia la settimana in cui si verifica il 1 ° gennaio.

Esempi:

Sub DatePartExample()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56
    
    Debug.Print DatePart("yyyy", MyDate)              ' prints 2016
    Debug.Print DatePart("y", MyDate)                 ' prints 210
    Debug.Print DatePart("h", MyDate)                 ' prints 12
    Debug.Print DatePart("Q", MyDate)                 ' prints 3
    Debug.Print DatePart("w", MyDate)                 ' prints 5
    Debug.Print DatePart("ww", MyDate)                ' prints 31

End Sub

Funzioni di calcolo

DateDiff ()

DateDiff() restituisce un Long rappresenta il numero di intervalli di tempo tra due date specificate.

Sintassi

DateDiff ( interval, date1, date2  [, firstdayofweek] [, firstweekofyear] )
  • intervallo può essere uno qualsiasi degli intervalli definiti nella funzione DatePart()
  • data1 e data2 sono le due date che si desidera utilizzare nel calcolo
  • il primo giorno di settimana e il primo di anno sono opzionali. Fare riferimento alla funzione DatePart() per le spiegazioni

Esempi

Sub DateDiffExamples()

    ' Check to see if 2016 is a leap year.
    Dim NumberOfDays As Long
    NumberOfDays = DateDiff("d", #1/1/2016#, #1/1/2017#)
    
    If NumberOfDays = 366 Then
        Debug.Print "2016 is a leap year."              'This will output.
    End If
           
    ' Number of seconds in a day
    Dim StartTime As Date
    Dim EndTime As Date
    StartTime = TimeSerial(0, 0, 0)
    EndTime = TimeSerial(24, 0, 0)
    Debug.Print DateDiff("s", StartTime, EndTime)       'prints 86400

End Sub

DateAdd ()

DateAdd() restituisce una Date a cui è stata aggiunta una data o un intervallo di tempo specificato.

Sintassi

DateAdd ( interval, number, date  ) 
  • intervallo può essere uno qualsiasi degli intervalli definiti nella funzione DatePart()
  • numero Espressione numerica che corrisponde al numero di intervalli che si desidera aggiungere. Può essere positivo (per ottenere date in futuro) o negativo (per ottenere date in passato).
  • data è una Date o letterale che rappresenta la data a cui viene aggiunto l'intervallo

Esempi:

Sub DateAddExamples()

    Dim Sample As Date
    'Create sample date and time of 2016-07-28 12:34:56
    Sample = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)
    
    ' Date 5 months previously (prints 2016-02-28):
    Debug.Print Format$(DateAdd("m", -5, Sample), "yyyy-mm-dd")
    
    ' Date 10 months previously (prints 2015-09-28):
    Debug.Print Format$(DateAdd("m", -10, Sample), "yyyy-mm-dd")
    
    ' Date in 8 months (prints 2017-03-28):
    Debug.Print Format$(DateAdd("m", 8, Sample), "yyyy-mm-dd")

    ' Date/Time 18 hours previously (prints 2016-07-27 18:34:56):
    Debug.Print Format$(DateAdd("h", -18, Sample), "yyyy-mm-dd hh:nn:ss")
    
    ' Date/Time in 36 hours (prints 2016-07-30 00:34:56):
    Debug.Print Format$(DateAdd("h", 36, Sample), "yyyy-mm-dd hh:nn:ss")

End Sub

Conversione e creazione

CDate ()

CDate() converte qualcosa da qualsiasi tipo di dati in un tipo di dati Date

Sub CDateExamples()

    Dim sample As Date

    ' Converts a String representing a date and time to a Date
    sample = CDate("September 11, 2001 12:34")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 12:34:00
    
    ' Converts a String containing a date to a Date
    sample = CDate("September 11, 2001")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 00:00:00

    ' Converts a String containing a time to a Date
    sample = CDate("12:34:56")
    Debug.Print Hour(sample)                        ' prints 12
    Debug.Print Minute(sample)                      ' prints 34
    Debug.Print Second(sample)                      ' prints 56
    
    ' Find the 10000th day from the epoch date of 1899-12-31
    sample = CDate(10000)
    Debug.Print Format$(sample, "yyyy-mm-dd")       ' prints 1927-05-18
    
End Sub

Si noti che VBA dispone anche di un CVDate() vagamente tipizzato che funziona allo stesso modo della funzione CDate() oltre a restituire una data digitata Variant invece di una Date fortemente tipizzata. La versione CDate() dovrebbe essere preferita quando si passa a un parametro Date o si assegna a una variabile Date e la versione CVDate() deve essere preferita quando si passa a un parametro Variant o si assegna a una variabile Variant . Questo evita il cast di tipo implicito.


DateSerial ()

DateSerial() viene utilizzata per creare una data. Restituisce una Date per un anno, mese e giorno specificati.

Sintassi:

DateSerial ( year, month, day ) 

Gli argomenti relativi a anno, mese e giorno sono validi Numeri interi (Anno da 100 a 9999, Mese da 1 a 12, Giorno da 1 a 31).

Esempi

Sub DateSerialExamples()

    ' Build a specific date
    Dim sample As Date
    sample = DateSerial(2001, 9, 11)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the first day of the month for a date.
    sample = DateSerial(Year(sample), Month(sample), 1)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the last day of the previous month.
    sample = DateSerial(Year(sample), Month(sample), 1) - 1
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
End Sub

Si noti che DateSerial() accetterà date "non valide" e calcolerà una data valida da esso. Questo può essere usato creativamente per bene:

Esempio positivo

Sub GoodDateSerialExample()

    'Calculate 45 days from today
    Dim today As Date
    today = DateSerial (2001, 9, 11)
    Dim futureDate As Date
    futureDate = DateSerial(Year(today), Month(today), Day(today) + 45)
    Debug.Print Format$(futureDate, "yyyy-mm-dd")            'prints 2009-10-26

End Sub

Tuttavia, è più probabile che causi dolore quando si tenta di creare una data da un input utente non convalidato:

Esempio negativo

Sub BadDateSerialExample()

    'Allow user to enter unvalidate date information
    Dim myYear As Long
    myYear = InputBox("Enter Year")                                         
            'Assume user enters 2009
    Dim myMonth As Long
    myMonth = InputBox("Enter Month")                                       
            'Assume user enters 2
    Dim myDay As Long
    myDay = InputBox("Enter Day")                                           
            'Assume user enters 31
    Debug.Print Format$(DateSerial(myYear, myMonth, myDay), "yyyy-mm-dd")   
            'prints  2009-03-03

End Sub


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow