Jak zwrócić nazwę obecnego miesiąca?

przez | 2024-07-02

Czasami chcemy zwrócić nazwę aktualnego miesiąca. Pierwsza myśl, jaka przychodzi mi do głowy to prosta instrukcja Select Case:

Function PodajMiesiac(Miesiac As Long) As String
    Dim Ret As String
    
    Select Case Miesiac
        Case 1: Ret = "Styczeń"
        Case 2: Ret = "Luty"
        Case 3: Ret = "Marzec"
        Case 4: Ret = "Kwiecień"
        Case 5: Ret = "Maj"
        Case 6: Ret = "Czerwiec"
        Case 7: Ret = "Lipiec"
        Case 8: Ret = "Sierpień"
        Case 9: Ret = "Wrzesień"
        Case 10: Ret = "Październik"
        Case 11: Ret = "Listopad"
        Case 12: Ret = "Grudzień"
        Case Else: Ret = "Zły miesiąc"
    End Select
    
    PodajMiesiac = Ret
End Function


Sub Testuj()
    Dim Miesiac As Long
    
    Miesiac = Month(Date)
    MsgBox "Obecny miesiąc to: " + PodajMiesiac(Miesiac), vbInformation
End Sub

Jest jednak prostszy sposób.

Otóż w Excelu mamy funkcję o nazwie TEKST, która formatuje liczbę (data to dla Excela liczba) w zadanym przez nas formacie. Jeśli np. w komórce A1 masz wpisaną jakąś datę to pisząc taką oto funkcję: =TEKST(A1, „mmmm” Excel nam zwróci nazwę miesiąca.

Możemy wywołać metodę Application.WorksheetFunction.Text, która jest „kalką” funkcji TEKST (zwróć uwagę, że w metodzie Application.WorksheetFunction.xxx są angielskie nazwy funkcji Excela a nie polskie). Oto poprawiona funkcja:

Function PodajMiesiac(Miesiac As Long) As String
    Dim Ret As String
    Dim przykladowaData As Date
    
    If Miesiac >= 1 And Miesiac <= 12 Then
        przykladowaData = DateSerial(2000, Miesiac, 1)
        Ret = Application.WorksheetFunction.Text(przykladowaData, "[$-PL]mmmm")
    Else
        Ret = "Zły miesiąc"
    End If
    
    PodajMiesiac = Ret
End Function


Sub Testuj()
    Dim Miesiac As Long
    
    Miesiac = Month(Date)
    MsgBox "Obecny miesiąc to: " + PodajMiesiac(Miesiac), vbInformation
End Sub

Mamy tutaj trochę zabawy gdyż najpierw z daty wyciągamy numer miesiąca (w procedurze Testuj) a potem w funkcji PodajMiesiac „budujemy” datę typu 1.miesiąc.2020 i taką datę formatujemy w formacie mmmm. Tutaj mała uwaga: w VBA jeśli w metodzie Application.WorksheetFunction.Text podamy format mmmm to zostanie zwrócona nazwa miesiąca ale nie po polsku (a taką mam wersję językową pakietu Office) tylko po angielsku. Dlatego w formacie musiałem dodać prefiks [$-PL] który mi mówi, że zwrócona nazwa miesiąca ma być „po polsku”

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.