Niektóre funkcjonalności działają dopiero w nowszych wersjach pakietu MS Office. Jak sprawdzić pod jaką wersją pakietu MS Office zostało uruchomione makro?
Możemy odczytać właściwość Application.Version.
Oto najprostszy kod:
Msgbox Application.Version
Zostanie wyświetlona liczba. Liczba ta odpowiada wersji pakietu MS Office zgodnie z poniższą tabelą:
Rok premiery | Nazwa | Wersja (wartość zwrócona przez Application.Version) |
1995 | Excel 95 | 7.0 |
1997 | Excel 97 | 8.0 |
2000 | Excel 2000 | 9.0 |
2002 | Excel 2002 | 10.0 |
2003 | Excel 2003 | 11.0 |
2007 | Excel 2007 | 12.0 |
2010 | Excel 2010 | 14.0 |
2013 | Excel 2013 | 15.0 |
2016 | Excel 2016 (i nowsze) | 16.0 |
Wersja 95 to pierwsza wersja, w której pojawił się język VBA (w wersji mocno okrojonej względem późniejszych wersji). Ale tak naprawdę dopiero w wersji 97 nastąpiła rewolucja i pojawiła się m.in. obsługa zdarzeń i środowisko programistyczne zbliżone do Visual Basic 5.0.
Natomiast wersje od 2016 górę (np. 2029, 2021, Office 365) zwracają wartość 16.0 – nie ma prostego sposobu na rozróżnienie tych wersji.
Zwróć uwagę na pewną ciekawostkę: nie istnieje wersja 13.0 (mamy wersję 12.0 czyli Office 2007 a potem 14.0 czyli Office 2010). Jak widać firma Microsoft wierzy w zabobony 😉
Wartość zwrócona przez Application.Version to tekst (liczba dziesiętna z kropką, po liczbie może występować również jakaś literka, np. najstarsza wersja pakietu Excela z jaką miałem do czynienia zwraca mi wartość 7.0a). Taką wartość należy przekonwertować na liczbę np. za pomocą instrukcji Val. Oto przykładowy kod zwracający opisowy numer wersji programu Excel:
Sub JakaWersja()
Dim Wersja As Long
Dim WersjaOpis As String
Wersja = Val(Application.Version)
Select Case Wersja
Case 7: WersjaOpis = "Excel 95"
Case 8: WersjaOpis = "Excel 97"
Case 9: WersjaOpis = "Excel 2000"
Case 10: WersjaOpis = "Excel 2002"
Case 11: WersjaOpis = "Excel 2023"
Case 12: WersjaOpis = "Excel 2007"
Case 13: WersjaOpis = "Taka wersja nie istniała, w Microsofcie wierzą w zabobony ;-)"
Case 14: WersjaOpis = "Excel 2010"
Case 15: WersjaOpis = "Excel 2013"
Case 16: WersjaOpis = "Excel 2016 lub nowszy lub Excel 365"
Case Else: WersjaOpis = "Nieprawidłowa wartość??"
End Select
MsgBox "Numer wersji: " & Application.Version & vbCrLf & "Opis: " + WersjaOpis, vbInformation
End Sub