Makro (VBA) načte data z excelového souboru, který uživatel zvolí

V jednom z minulých článků jsme publikovali makro, které umí zkopírovat data z jednoho předem daného souboru do druhého. Co když ale soubor, ze kterého chceme data načíst, zatím neznáme? Řešením je napsat makro, která se nejprve zeptá, který soubor chceme otevřít.

Řekněme, že naším cílem bude do buňky C10 na listu 1 souboru, ve kterém máme makro, zkopírovat hodnotu ze souboru, který teprve vybereme. Přičemž víme, že hodnota se nachází v buňce B5

Co je dobré vědět předem?

  • Ve VBA existuje více možností, jak vyvolat dialogové okno pro otevření souboru. My použijeme metodu Application.FileDialog, což je univerzální možnost pro vyvolání dialogového okna pro práci se soubory. Navíc obsahuje celou řadu možných nastavení.
  • Je rozumné ošetřit základní chybové stavy. Například pokud uživatel v dialogovém okně nezvolí žádný soubor nebo naopak zvolí více než jeden soubor
  • Všimněte si položky .SelectedItems(1), do které se nahraje adresa označeného souboru. Pokud budete chtít vybrat více než jeden soubor, budete pouze měnit číslovku v závorce a můžete adresy načíst do různých proměnných nebo do pole.

Zdrojový kód makra

Zdrojový kód makra je opatřen zkrácenými komentáři. Plné vysvětlení příkazů naleznete v další části článku.

Jak makro pracuje?

  • Nejprve příkazem Application.DisplayAlerts = False potlačíme výstražná hlášení excelu. To by nám komplikovalo běh makra v okamžiku, kdy makro zavírá soubor a excel se standardně ptá, zda chceme soubor opravdu zavřít.
  • Příkazem With Application.Filedialog....End With se vyvolá dialogové okno pro výběr souboru s následujícími parametry
    • InitialFileName = adresář, jež bude v okně nastaven jako výchozí
    • Title = název dialogového okna
    • Filters.Add = zařídí, že se v okně objeví pouze typy souborů, které se nám hodí. V prvních uvozovkách je uveden text, který uživatel uvidí, v druhých je samotná definice filtru. Číslo na posledním místě určuje pořadí filtru, pokud jich nastavíme více.
    • Show = zařídí samotné zobrazení okna
    • Mezi příkazy If ..End If jsou ošetřeny chybové stavy. pokud není vybrán žádný soubor, uživateli se vypíše hlášení a makro je ukončeno. Podobně se postupuje, pokud uživatel vybere více, než jeden soubor. v případě, že je vše v pořádku, načte se adresa souboru do proměnné zdrojovy_soubor
  • Příkaz Workbooks.Open(zdrojovy_soubor) otevře vybraný soubor
  • Dále se příkazem docasna = ActiveWorkbook.Worksheets("List1").range("B5") načte do proměnné hodnotu z buňky B5 z listu 1 aktovního souboru, tedy toho, který jsme zvolili. 
  • Příkaz ActiveWorkbook.Close pak sešit zavře
  • Příkaz ThisWorkbook.Activate aktivuje zpět tento soubor( soubor, ve kterém je toto makro). Tento příkaz není nutný, pokud pracujete pouze s jedním dalším souborem, neboť po jeho uzavření se aktivuje tento soubor automaticky.
  • Worksheets("List1").Range("C10") = docasna načte z proměnné hodnotu do buňky C10
  • Po té se příkazem Application.DisplayAlerts = true opět povolý excelová hlášení a makro se ukončí

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

Firemní kurzy

  • Přemýšlíte o firemním školení Excelu?
  • Školíme Excel od začátečníků po experty, ale také PowerPoint, PowerPivot nebo Access.
Mám zájem o kurz

Individuální výuka

Mám zájem o výuku

Vývoj aplikací v Excelu (makra - VBA)

  • Vyvíjíme aplikace pro potřeby firemních zákazníků
  • Reporty, vizualizace dat, harmonogramy, plánování
  • Slučování dat ze souborů, agregace, exporty
Zajímám se o vytvoření aplikace

Kontakt

  • Tel: +420 602 274 999
  • Mail: info@vyuka-excelu.cz
Kontaktní formulář
TOPlist