Czasami chcemy włączyć użytkownikowi jakąś stronę WWW w domyślnej przeglądarce. Istnieje kilka powodów dlaczego warto jest kogoś odesłać na jakąś stronę WWW np.
- Napisałeś użyteczne makro i chcesz odesłać użytkownika na swoją stronę WWW w celach promocyjnych.
- Albo chcesz odesłać na podstronę z swoim makrem na swojej stronie domowej, aby użytkownik sprawdził czy jest nowa wersja
- Makro jest na tyle rozbudowane, że potrzebna jest jakaś pomoc/dokumentacja techniczna i owa pomoc jest w postaci strony internetowej.
Jeśli napisałeś makro w Excelu to najprościej jest odesłać kogoś na stronę WWW pisząc taki oto prosty kawałek kodu:
Sub WWW()
ActiveWorkbook.FollowHyperlink "https://www.kursvba.pl"
End Sub
Ale ma od dwie zasadnicze wady:
- Działa tylko w Excelu (np. w Wordzie nie ma obiektu ActiveWorkbook)
- Jeśli napisałeś np. dodatek programu Excel (Add-In) i nie jest aktywny żaden skoroszyt (tj. jest otworzony Excel, ale wszystkie skoroszyty są zamknięte) to wyskoczy błąd: Run-timer error 91 Object variable or With block variable not set
W takich sytuacjach warto skorzystać z Win32 API z bibliotecznej funkcji ShellExecute. Oto prosty kod (jest on przystosowany zarówno do wersji 32- jak i 64-bitowej wersji pakietu Office):
Public Const SW_SHOWNORMAL = 1
#If VBA7 Then
Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal Hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal Hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If
Sub WWW2()
Dim Z As Long
Z = ShellExecute(0, "open", "https://www.officeblog.pl", "", "", SW_SHOWNORMAL)
End Sub
Wskazówka: jeśli deklaracje funkcji API zamieszczasz np. w kodzie formularza a nie w module, to wszystkie słowa kluczowe Public należy zamienić na Private