Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-soubory » excel-vba-vypis-cesty-k-souboru

Vypis cesty k souboru - VBA Excel

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

Soubory a adresáře, jak na ně ve VBA v MS Excelu? Získat jméno, příponu, umístění v adresáři aktuálního sešitu.

Doplněno: 1.11.2015

Úvodem

VBA - Microsoft Excel logo

Při vytváření maker ve VBA, je někdy potřeba číst/zapisovat do jiného Excelovského souboru. Je vhodné použít relativní cesty. Aby námi vytvořené makro fungovalo i na jiném PC (v jiném adresáři). Pro přehlednost je soubor rozdělen na jednotlivé kapitoly:


Cesta

Vypíše cestu ve které se nachází spouštěné makro. Příkaz DIR v MS DOS.


  CestaAdresare = ThisWorkbook.Path

Poznámka: Pro tento příklad můžeme využít i funkce.

Funkce CestaAdresare

Function CestaAdresare()
    CestaAdresare = ThisWorkbook.Path
End Function

V buňce jen zadáme: =CestaAdresare()

Jméno souboru (sešitu) s příponou

Vypíše názej (jméno) aktivního souboru (ze kterého je makro spuštěno).

    JmenoSouboru = ThisWorkbook.Name

Rozdělený název / přípona souboru

Vypíše pouze název (jméno) souboru (bez přípony) a příponu.

Dim NazevSoubor As String, FileName As String, FileType As String NazevSoubor = ThisWorkbook.Name pomucka = Split(NazevSoubor, ".") FileName = pomucka(0) FileType = pomucka(1) MsgBox FileName MsgBox FileType

Cesta včetně názvu souboru

CestaVcetneNazvuSouboru = ThisWorkbook.Fullname

Nebo za využítí předcházejicí VBA maker.

  CestaVcetneNazvuSouboru = CestaAdresare & "\" & JmenoSouboru

Pod adresář(e), složky

Pokud se ve složce, kde máme náš soubor s makrem potřebujeme přesunout do nadřazeného adresáře není problém.


    CestaVcetneSouboruA_PodAdresare = CestaAdresare & "\data\" & JmenoSouboru

Poznámka: Podadresář data.Využívá předcházejicí VBA makra.

Nadřazený adresář

Jsem ve složce C:/VBA/pokus/adresar a potřebuji se dostat do C:/VBA/pokus. Tady již nastává menší problém, ale i ten je řešitelný. Můj postup je nasledující.

  1. O kolik nadřazených složek se potřebujeme dostat nahoru (V příkladu 1)
  2. Zjistíme počet znaků adresaře funkcí LEN, musíme použít anglicky název této funkce. Jelikož český POČET funguje jen v sešitu MS EXcel.
  3. Zjistíme počet lomítek adresáře ve VBA funkcí MID. Česky ČAST.
  4. Vypočteme pořadí zvoleného lomítka
  5. Vypreparujeme požadovaný text pomocí funkce LEFT, Česky ZLEVA.
  6. A máme hotovo.

Poznámka: Můžeme doplníme o kontrolu, pokud někdo chce zobrazit vyšší podsložku než můžeme, případně o dialogová okna k zadání dotazu.

Postřeh: Překlady funkci do češtiny jsou zlo. V sešitu se používá česká při programování maker anglická. Po chvíli je v tom chaos.

Private Sub PozadovanyAdresar()

CestaAdresare = ThisWorkbook.Path
KolikAdresaruNahoru = 1

CestaPocetZnaku = Len(CestaAdresare)

PocetLomitekAdresare = 0
For i = 1 To CestaPocetZnaku
     ZnakLomitko = Mid(CestaAdresare, i, 1)
     If ZnakLomitko = "\" Then
         PocetLomitekAdresare = PocetLomitekAdresare + 1
     End If
Next i

i = 1
PoradiLomitka = 0
For i = 1 To CestaPocetZnaku
     ZnakLomitko = Mid(CestaAdresare, i, 1)
     If ZnakLomitko = "\" Then
         PoradiLomitka = PoradiLomitka + 1
     ElseIf PoradiLomitka = PocetLomitekAdresare - KolikAdresaruNahoru Then
         PozadovaneLomitko = i
     End If
Next i


PozadovanyAdresar = Left(CestaAdresare, PozadovaneLomitko)

MsgBox (PozadovanyAdresar)

End Sub

Poznámka

Toto makro můžeme převést na i funkci :)

Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor VBA soubory adresáře soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.


Závěr

Využívate ve svých VBA projektech? Máte nějaký zajimavý tip, trik? Můžete se pochlubit v komentářích.

Článek byl aktualizován: 19.09.2020 11:07

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


mumiak

Přidáno: 13.07.11 09:26

CestaVcetneNazvuSouboru = ThisWorkbook.Fullname

Pavel Lasák

Přidáno: 13.07.11 16:35

To muniak: Díky. Doplněno v článku jako další možnost.

bod

Přidáno: 16.09.11 07:30

Chci poslat MS Outlookem v emailu přibalený soubor. Dělám to ve VBA pomocí OutlookMailItem a .Attachment.Add, bohužel se mi přibalený soubor posílá jako prázdný (0 b). Co dělám se souborem špatně? Díky za pomoc.

Pavel Lasák

Přidáno: 18.09.11 11:58

To Bod: Zkuste diskuzi http://www.pcreview.co.uk/forums/vba-outlook-attachments-question-t1836514.html

Honza

Přidáno: 21.03.13 12:47

Lze přednastavit cestu k souboru při otevírání souboru (GetOpenFilename)? Při ukládání to jde (u GetSaveAsFilename je parametr InitialFileName). Děkuji

Honza

Přidáno: 28.03.13 08:34

Můžu zopakovat svůj dotaz? Třeba se na něj zapomnělo. Lze přednastavit cestu k souboru při otevírání souboru (GetOpenFilename)? Při ukládání to jde (u GetSaveAsFilename je parametr InitialFileName). Děkuji

Pavel Lasák

Přidáno: 28.03.13 16:09

To Honza: Nezapomnělo. Třeba vám pomůže: http://www.mrexcel.com/forum/excel-questions/371814-visual-basic-applications-getopenfilename.html bohužel tento web není technickou podporou (proto prioritu nedávám do odpovídaní na dotazy).

Honza

Přidáno: 10.04.13 13:11

Cestu lze přednastavit místo GetOpenFilename použítím Application.FileDialog(msoFileDialogFilePicker). Tady lze také nastavit cestu metodou .InitialFileName = mojecesta

Pavel Lasák

Přidáno: 10.04.13 16:11

To Honza: Děkuji za odpověď určitě se bude hodit někomu dalšímu.

Tomas

Přidáno: 01.10.14 11:40

Zdravím a díky za Vaše stránky. Mám dotaz - lze nějak zjistit cestu a název souboru, který mám otevřený, přičemž makro spouštím z jiného souboru? ThisWorkbook.Fullname vypíše cestu k souboru s makrem, ale já bych potřeboval cestu k souboru, ve kterém pracuji. díky...

Jojo

Přidáno: 06.10.14 08:29

To Tomas: -- Cesta a názov aktívneho súboru: --ActiveWorkbook.FullName

Tomas

Přidáno: 08.10.14 12:45

To Jojo: Výborně, díky...

Aleš Krejbich

Přidáno: 06.05.15 13:46

Díky moc za Vaší práci a rady! Podařilo se mi, jako úplnému začátečníkovi pomocí makra převést soubor do pdf., uložit ho, pojmenovat ho podle zadaných skutečností. Teď bych ještě potřeboval, aby otevřel dialogové okno Outlooku, do přílohy dal vytvořený pdf. soubor a do pole Kopie zadal vždy stejnou emailovou adresu. Do pole předmět název souboru Je to možné?

Zdeněk

Přidáno: 06.08.15 22:33

to Aleš Krejbich je to možné metod je hodně podívej se youtube

xlnc

Přidáno: 10.11.15 20:50

Příponu od názvu souboru Pavle umíte rozdělit přes Split a parsovat cestu stejným způsobem ne? V cyklu procházíte znaky? InStrRev nic? Kromě toho, mnohem elegantnější je model FSO. Prostě jsem od vás čekal víc, ne SEO serepetičky pro srandu králíkům.

Pavel Lasák

Přidáno: 15.11.15 14:26

To xlnc: Děkuji, mám v plánu doplnit, jako spoustu dalších informací do jiných článku. Jen den má stále jen 24 hodin :(






Excel


Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |