Excel - import obrázků

Vkládání obrázků do sešitů v excelu se může jevit jako efektní, nicméně při větším počtu obrázků značně neefektivní. S každým obrázkem dramaticky narůstá velikost výsledného sešitu.

Dynamické načítání obrázků

Řešením problému je dynamické načítání obrázků. Při použití níže uvedného makra bude sešit obsahovat vždy pouze 1 obrázek, který bude navíc odstraněn před každým uložením. Velikost výsledného souboru tak bude stejná, jako kdyby sešit žádný obrázek neobsahoval.

Stáhnout vzorový sešit (zip, 186 kB), 17. 3. 10

Postup

Při každé změně na listu bude z předem určené složky načten obrázek, jehož název je uveden v konkrétní buňce. Proto je třeba kód umístit jinam, než do standardního modulu.

  • Klávesovou zkratkou Alt + F11 se dostaneme do editoru VBA.
  • V levé části okna poklepeme levým tlačítkem myši na aktivní list (List1).
  • V zobrazném okně vybereme z levého rozbalovacího seznamu položku Worksheet a z pravého položku SelectionChange.
  • Na místo kurzoru vložíme následující proceduru.
Option Explicit

Application.ScreenUpdating = False
On Error Resume Next
Dim oblast As String, vlozit As String, _
    slozka As String, adresa As String, _
    pripona As String, nazev As String

'definování proměnných
oblast = "A1"                                   'buňka, kde bude název obrázku
vlozit = "C1"                                   'buňka, do které se obrázek vloží
slozka = "obr"                                  'podsložka, kde jsou obrázky umístěné
adresa = ThisWorkbook.Path & "\" & slozka & "\" 'kompletní adresa pro vyhledání obrázků
pripona = "jpg"                                 'přípona (formát) obrázků
nazev = Range(oblast).Value & "." & pripona     'jméno souboru s příponou k vyhledání

'vymazání všech obrázků na aktivním listu
For Each img In ActiveSheet.Pictures
    img.Delete
Next img

'vložení nového obrázku do buňky C1
Range(vlozit).Select
ActiveSheet.Pictures.Insert adresa & nazev

Range(oblast).Select
Application.ScreenUpdating = True

Tím je zajištěno dynamické načítání obrázků. Nyní je ještě třeba zajistit, aby se obrázek smazal před uložením a nezvětšoval tak velikost celého souboru.

  • V editoru tentkorát poklepeme na položku ThisWorkbook.
  • V zobrazném okně vybereme z levého rozbalovacího seznamu položku Workbook a z pravého položku BeforeSave.
  • Na místo kurzoru vložíme následující proceduru.
For Each img In ActiveSheet.Pictures
    img.Delete
Next img