Hypertextový odkaz v Excelu

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í.

Odstavení automatického zpracování hypertextových odkazů
Odstavení automatického zpracování hypertextových odkazů

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.

Hypertextový odkaz
Hypertextový odkaz

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.

Hypertextový odkaz na místo v souboru
Hypertextový odkaz na místo v souboru

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.

Hypertextový odkaz - nový e-mail
Hypertextový odkaz – nový e-mail

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?

Odstranění hypertextového odkazu
Odstranění hypertextového odkazu

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.

Hypertextový odkaz při tažení pravým tlačítkem myši
Hypertextový odkaz při tažení pravým tlačítkem myši

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).

Funkce HYPERTEXTOVÝ.ODKAZ - základy
Funkce HYPERTEXTOVÝ.ODKAZ – základy

Je čas ukázat si realizaci „mailto“ a „skype“ funkcí.

Funkce HYPERTEXTOVÝ.ODKAZ - mailto a skype
Funkce HYPERTEXTOVÝ.ODKAZ – mailto a skype

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?

Funkce HYPERTEXTOVÝ.ODKAZ - symbol
Funkce HYPERTEXTOVÝ.ODKAZ – symbol

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é odkazy v seznamech ověření
Hypertextové odkazy v seznamech 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.

Funkce HYPERTEXTOVÝ.ODKAZ - makra?
Funkce HYPERTEXTOVÝ.ODKAZ – 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
Hyperlink na makro jinak...
Hyperlink na makro jinak…

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.

Microsoft Web Browser
Microsoft Web Browser
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