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”