Pokud Excel rozpozná v textu buňky hypertextový odkaz (zkráceně hyperlink) směřující na webovou stránku či e-mail, zprovozní jej na klepnutí myškou. Někdy je tato funkčnost potřebná, jindy otravná. Chování lze ovlivnit v nastavení.
Na listu lze vytvořit hypertextový odkaz s pomocí funkce nebo ručně. Průvodce najdete pod pravým tlačítkem myši a na Pásu karet.
Popisek, který vidíte při najetí nad odkaz myší, lze upravit pouze programově.
Hyperlinky nemusí nutně směřovat na internet. Odkázat se můžeme na jiné buňky, listy, jiné sešity a soubory (obrázky, dokumenty Wordu, …), dokonce i aplikace. Počítejte ale s tím, že ne všechno vám projde bez potvrzovacího dialogu.
Relativnost odkazů
a) Pokud vytváříte hyperlink na soubor, který leží ve stejném adresáři jako odkazující se sešit (níže C:\Hyperlinky\), pak Excel vždy při ukládání nahradí odkaz za relativní bez ohledu na způsob zadání adresy:
file://C:/Hyperlinky/cil.xlsx
file:///C:\Hyperlinky\cil.xlsx
C:\Hyperlinky\cil.xlsx
tj. výsledkem bude adresa cil.xlsx, ačkoliv v buňce zobrazený text zůstane po uložení neměnný. Leží-li odkazovaný soubor v jiném adresáři, ponechá Excel absolutně zadanou adresu. Dva sešity ležící vedle sebe ve stejné složce jsou tedy sázkou na jistotu z pohledu přenositelnosti řešení.
b) Definovaný základ hypertextového odkazu
viz Soubor / Informace / Vlastnosti / Upřesnit vlastnosti, záložka Souhrnné informace, Základ hyp. odkazu
Pokud do Základu hyp. odkazu zapíšete nesmysl, kupříkladu „x“, pak veškeré odkazy bude brát Excel za absolutní. Uvedený základ ignoruje a nedočkáte se ani chybového hlášení. Tento tip ostatně předkládá samotný Microsoft. Absolutní adresace se při prostém „naklikávání“ odkazu projeví i na zobrazeném textu v buňce.
Smysluplnější je samozřejmě uvést základ hypertextového odkazu správně, v daném případě C:\Hyperlinky\. Při naklikávání cesty v hyperlinku uvidíte rozdíl také okamžitě – jako zobrazený text se nabídne pouze cil.xlsx. Pokud by byl základ jen C:\, pak by se v samotném odkazu objevil jen zbytek – Hyperlinky\cil.xlsx. V případě chybné části základu (třeba C:\Hyperkudrlinky\) bere Excel jako základ disk C a v odkazu poté použije ..\Hyperlinky\cil.xlsx. V praxi dvě tečky znamenají přesun o adresář ve struktuře výše a pokračování ve vypsané cestě.
Pokud už jste někdy zahlédli odkaz „mailto:“, pak asi víte, že otevírá poštovního klienta s předvyplněnou novou zprávou.
Možná, že znáte i odkazy „callto://“, případně „skype:“, s nimiž přišel Skype. Detail najdete na Skype URIs. Základem je „skype:profile_name?action“, kde jako akce se může dle diskusí objevit „call, chat, voicemail, sendfile, add, userinfo“. V průvodci pro Hypertextový odkaz vám ovšem Excel vnutí prefix „mailto:“, takže na Skype se podíváme později.
Jak vymazat hypertextové odkazy z průvodce?
Pozn. Pokud táhnete buňku za hranu pravým tlačítkem myši, objeví se v kontextovém menu také možnost hypertextového odkazu. Smutné je, že mi tato volba nefunguje ani v jedné verzi českého Excelu.
Funkce HYPERTEXTOVÝ.ODKAZ
Namísto průvodce se častěji budete obracet na funkci HYPERTEXTOVÝ.ODKAZ, která je variabilnější. Většinu povídání o ní nahradí obrázky (a sešit přílohy na konci článku).
Je čas ukázat si realizaci „mailto“ a „skype“ funkcí.
Tip: Napadlo vás něco? Ať už máte Skype Business nebo jen ten klasický, co si zaplatit kredit a řešit objednávky (lépe řečeno obvolávání klientů) ze seznamu přímo v Excelu?
A co takový odkaz pod grafickým symbolem písma směřující na poslední vyplněnou buňku seznamu?
Pozn. Hyperlinky lze pochopitelně navázat i na grafické objekty (viz kontextové menu).
A ještě zdaleka nekončíme.
Tip: Vychytávkou (není z mé dílny), je hyperlinkový seznam v Data / Ověření.
Hypertextový odkaz na makro?
Pár chytrých hlav dávalo hlavy dohromady ve snaze přimět hypertextové odkazy spouštět makra.
Odpověď zní – ne, není to jednoduše možné. Nabízím techniku, jak si poradit jinak. Obsahuje tři podstatné myšlenky:
1. Nasadit v buňkách hypertextové odkazy směřující na ně samé.
2. Při otevření sešitu zapsat do vlastností ID těchto buněk, co mají spustit (s případným parametrem).
3. Odchytávat událost listu FollowHyperlink a provádět potřebné akce přes Application.Run.
Pozn. Vlastnost ID se bohužel neukládá se sešitem. V praxi se stejně nevyhneme nějaké mapovací tabulce, ať už pro hromadné přiřazení informací nebo pro zpětné vyhledávání v nich. Mohou být na listu nebo třeba i v INI souboru.
Modul ThisWorkbook:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Private Sub Workbook_Open() On Error Resume Next 'na listu wshHyperMakra With wshHyperMakra 'přiřazení buňky do objektové proměnné Set rngBunka = .Range("B2") 'zápis informací od ID buňky 'procedura a parametr rngBunka.ID = "MojeMakroParametr" & vbLf & 25 'přidání hyperlinku 'buňka používá makro, takže odkazuje sama na sebe 'programově lze do SubAddress přiřadit 'také prázdný řetězec .Hyperlinks.Add _ Anchor:=rngBunka, _ Address:="", _ SubAddress:=rngBunka.Address(0, 0), _ ScreenTip:="Spustí MojeMakroParametr", _ TextToDisplay:="Klepni na mě" End With End Sub |
Modul listu wshHyperMakra (přejmenovaný list, viz vlastnost Name), kde chceme využívat hyperlinky pro spouštění maker:
1 2 3 4 5 6 7 | Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 'v případě chyby skoč na další řádek On Error Resume Next 'událostní procedura předává skryté informace z ID buňky 'proceduře SpustitMakro Call SpustitMakro(Target.Parent.ID) End Sub |
Standardní modul:
1 2 3 4 5 6 7 8 9 | Sub SpustitMakro(ByVal BunkaID As String) Dim aID aID = Split(BunkaID, vbLf) Application.Run aID(0), aID(1) End Sub Sub MojeMakroParametr(ByVal Cislo As Integer) MsgBox "Předaný parametr: " & Cislo End Sub |
Hyperlinky ve VBA
A co hyperlinky a VBA samo o sobě? První na ráně je metoda FollowHyperlink (ano, jde o stejný název jako výše).
1 2 3 4 5 6 | Sub WebovyOdkazA() 'otevření odkazu ve výchozím internetovém prohlížeči ThisWorkbook.FollowHyperlink Address:="https://proexcel.cz" End Sub |
Pozn. Tato metoda se úspěšně používá i pro otevírání PDF souborů.
Ačkoliv odesílání e-mailů není dnešním předmětem zájmu (více viz článek Jak odeslat e-mail z Excelu), zde alespoň malá ukázka využití metody FollowHyperlink pro tyto účely.
1 2 3 4 5 6 7 | Sub NovyMail() 'otevření odkazu v poštovní aplikaci (Microsoft Outlook) ThisWorkbook.FollowHyperlink _ Address:="mailto:nekdo@nekde.cz&subject=Předmět zprávy&body=Obsah zprávy" End Sub |
Nyní ale zpět ke klasickým hypertextovým odkazům. Otevřít odkaz v prohlížeči zvládá i funkce Shell.
1 2 3 4 5 6 | Sub WebovyOdkazB() 'otevření odkazu ve výchozím internetovém prohlížeči Shell "explorer.exe https://proexcel.cz", vbMaximizedFocus End Sub |
Funkce Shell ve VBA má příbuznou v podobě API funkce ShellExecute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Private Declare Function ShellExecute Lib "shell32" _ 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 Sub WebovyOdkazC() 'otevření odkazu ve výchozím internetovém prohlížeči 'API funkce ShellExecute 'poslední parametr odpovídá konstantě SW_SHOWNORMAL = 1 ShellExecute 0&, "Open", "https://proexcel.cz", "", "", 1 End Sub |
Pokud máte z nějakého důvodu potřebu zobrazovat webové stránky na formuláři VBA (lze i na listu), přidejte si do Toolboxu ovládací prvek Microsoft Web Browser (pravé tlačítko myši a Additional Controls). O načtení stránky se postará metoda Navigate.
1 2 3 4 5 6 | Private Sub UserForm_Initialize() 'načtení stránky v ovládacím prvku Microsoft WebBrowser WebBrowser1.Navigate "https://proexcel.cz" End Sub |
Zmíněný ovládací prvek je ovšem bez pardonů vykopávka (podobně jako nástroj Data / Z webu). Bude mít problémy se skripty, neporadí si kloudně ani s responzivními weby (což by se skvěle na formuláři hodilo). Škoda slov. Ale pro dnešek jistě stačilo.
Příloha:
excel_hypertextove_odkazy.zip