Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Jak nastavit Excel VBA, aby se po spuštění spustil patřičný skript...
Článek aktualizován a doplněn.
Chceme-li aby při spuštění MS Excel vykonal nějakou činnost. Máme volbu:
Při automatickém i ručním spuštění tohoto souboru.
Jak na to? Úplně jednoduše do ThisWorkbook vložíme následující kod:
Private Sub Workbook_Open()
MsgBox "office.lasakovi.com"
End Sub
Poznámka: Po spuštění excelu se nám zobrazí dialogové okno s textem: "office.lasakovi.com". Tj. při události (otevření sešitu) se spustí požadovaný kod (zobrazení dialogového okna).
Skript bude proveden pouze pokud soubor bude spuštěn ručně.
Jak na to? Použít příkaz Auto_Open, vložit do modulu
Sub Auto_Open()
MsgBox "spuštěno ručně"
End Sub
Kód doplnit do skriptu, který tento soubor volá...
Tento text je napsán záměrně jelikož se mi množily dotazy jak spouštět makro při otevření Excelovského souboru. Předpokládám, že umíte spustit Visual Basic a víte jak vložit do ThisWorkbook patřičný kód.
Článek byl aktualizován: 19.09.2020 11:07
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.
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ů.
Přidáno: 09.03.11 18:01
Pro otevření formuláře při spuštění Excel:
Private Sub Workbook_Open()
On Error Resume Next
Userform1.show
End Sub
Přidáno: 17.03.11 20:54
Dobrý den, bylo by možné nějakým způsobem nastavit automatické vypnutí excelu například po pěti minutách nečinnosti? Děkuji
Přidáno: 18.03.11 18:04
To Ondřej:
Jde třeba takhle. První makro za 30 sec spustí druhé. Druhe pak Excel ukonči:
Sub Ukonci30sec()
Application.OnTime Now + TimeValue("00:00:30"), "MujKonec"
End Sub
Sub MujKonec()
Application.DisplayAlerts = False
Application.Quit
End Sub
Přidáno: 18.03.11 21:38
Dobrý den, tak bohužel toto jsem překopíroval do basicu a nic se po třiceti vteřinách nečinnosti v excelu nestalo. tak nevim, kde je problem.
Přidáno: 19.03.11 13:16
Ondřej: Je potřeba spustit makro Ukonci30sec. Případně spuštění zajistit automaticky při spuštění MS Excel viz tento článek. tj. MsgBox "office.lasakovi.com" nahradit Application.OnTime Now + TimeValue("00:00:30"), "MujKonec"
Přidáno: 20.03.11 05:34
Dobrý den, děkuji za radu. O to mi právě šlo. Jen mi nyny píše Excel při automatickém spuštění prvního makra - nelze najít makro MujKonec. Přitom jsem oba příkazy správně zadal do basicu. Díky
Přidáno: 20.03.11 10:02
To Ondřej: Máte MujKonec v "Module1" tj. Když si zobrazíte makra musíte vidět makro "MujKonec" ne "ThisWorkbook.MujKonec"
Přidáno: 20.03.11 10:15
To Ondřej: ukázka http://www.uloz.to/8356028/ukonci-excel-xlsm
Přidáno: 20.03.11 20:38
Děkuji za příklad. Jen bych poprosil ve verzi 97-miček. XLSM nemohu otevřít.
Přidáno: 22.03.11 19:01
To Ondřej: tak i ve verzi 97... http://www.uloz.to/8388545/ukonci-excel-xls
Přidáno: 08.01.12 16:14
daju sa pouzit i makra : Sub auto_open() ... Sub auto_close() ...
Přidáno: 09.01.12 20:05
To fugist: To je pravda, ale Auto_Open se spustiti pouze při otevření sešitu ručně, u Workbook_Open funguje i když spustím pomocí kódu z jiného sešitu.
Přidáno: 21.01.12 11:25
Dobrý den, já mám opačný problém. Jak zajistit, aby se u sešitu, které automaticky spouští makro, se toto makro nespustilo, když ho otvírám pomocí kódu z jiného sešitu příkazem Workbooks.Open Filename:="xxx" Děkuji za radu.
Přidáno: 21.01.12 14:31
To Karel: Použít příkaz Auto_Open, vložit do modulu
Sub Auto_Open()
MsgBox "spuštěno ručně"
End Sub
Přidáno: 23.02.12 11:00
Mohl bych poprosit o radu, nedaří se mi napsat makro, které by vkládalo do buňky text, pokud bude do jiné buňky vložel konkrétní text. Pokud Ai = "Podmínka" pak Bi = "vložený text" a to aby to makro běželo pořád a pro všechny řádky. Takže kdykoliv by někdo vložil do jakékoliv řádky sloupce A text "Podmínka", tak by se ve stejné řádce sloupce B napsalo "vložený text. Děkuji moc.
Přidáno: 24.02.12 18:05
To Zbyněk: Musít reagovat na událost změna v listu viz http://office.lasakovi.com/excel/vba/vlastnosti-metody-udalosti-kolekce-excel-vba/.
Přidáno: 06.03.12 14:41
Spuštění skritpu v jiném sešitě:
Application.Run "jiny.xlsm!MojeMakro"
Přidáno: 21.11.12 11:15
Dobry den, moc dekuji za tohohle pomocnika, usetrilo mi to trochu nerva, protoze nekteri kolegove nechavaji stale otevrene soubory a dalsi do nich nemohou. Jen jsem se chtel zeptat, zda jde kod upravit tak aby se zapnul v momente konce aktivity, kdy ten dotycny zacne delat v jinem souboru ci odejde od pocitace. Takhle se vypne po urcite dobe od zapnuti souboru, coz nikdy nevime na jak dlouho bude :(. Moc dekuji! Petr
Přidáno: 21.11.12 15:56
To Petr J: Co je myšleno jako konec aktivity? Ukončen zápis přes formulář?
Přidáno: 22.11.12 08:02
moment kdy je posledni uhoz do klavesnice v danem sesite a pote se clovek presune bud do jineho souboru ci aplikace.
Přidáno: 22.11.12 16:26
To Petr J: třeba Vám pomůže článk na ozgrid.com: http://www.ozgrid.com/forum/showthread.php?t=32949
Přidáno: 22.11.12 16:44
To Pavel Lasak: to je presne to co bych hledal, za to moc dekuji, jen se mi nepusti uzavreni, zacne sice prvni cast, ale nikdy nezavre. Prvni jsem dal do workbooku a dalsi tri do modulu. Je to spravne? nebo musi byt vsechny tri u sebe? Moc jim nerozumim, takze si nejsem jist. Moc dekuji. Petr
Přidáno: 09.01.13 08:30
Dobrý den, prosím o radu. Nastavil jsem automatické zavření Excelu po určité době dle příspěvků výše. To funguje, ale já bych potřeboval,aby se mi zavřel jen ten sešit kam jsem makro umístil a ostatní zůstali otevřené. Te´d se mi po nastavené době zavřou všechny otevřené sešity. Děkuji za radu.
Přidáno: 09.01.13 16:18
To Jirka: Zavření aktivního sešitu:
ActiveWorkbook.Close
Pokud je potřeba před uzavřením uložit:
ActiveWorkbook.Close True
Zavřít daný soubor (je přesně určen). Může být aktivní jiný sešit, než ve kterém je makro k zavření.
Workbooks("Soubor.xls").Close
Přidáno: 09.01.13 16:52
To Pavel Lasák: Děkuji za rychlou reakci, ale nějak se mi nedaří. Mám sešit "Seznam" ze kterého otevírám přes hypertextové odkazy další sešity. V sešitu "Seznam" mám makro Private Sub Workbook_Open() Application.OnTime Now + TimeValue("00:01:30"), "Konec" End Sub Sub Konec() Application.DisplayAlerts = False Application.Quit End Sub Po stanoveném čase se zavřou všechny otevřené sešity. Potřebuji aby se zavřel jen sešit "Seznam" Zkoušel jsem zadat dle vaší rady Workbooks("Seznam.xls").Close ale stále se zavírají všechny. Někde dělám chybu ale nemohu přijít na to kde.
Přidáno: 09.01.13 17:29
Omlouvám se nějak se mi to smíchalo dohromady
Přidáno: 09.01.13 22:44
To Jirka: Application.Quit zavře vše (tj. ukončí Excel). Dávám si do ToDo listu a zkusím napsat článek.
Přidáno: 09.01.13 23:15
Díky moc za Váš čas
Přidáno: 10.01.13 07:54
To Pavel Lasák: Dle Vaší rady jsem napsal Workbooks("Název sešitu.xlsm").Close místo Application.Quit a vše funguje jak potřebuji. Ještě jednou díky za trpělivost se starý dědkem.
Přidáno: 10.01.13 16:20
To Jirka: Rádo se stalo, jsem rád, že funguje.
Přidáno: 08.03.13 18:18
Ahoj, mám menší problém s Visual Basicem. Potřeboval bych aby mi po dokončení načítaní v progressbaru vyskočilo okno s textem a vypl by se form 1. Děkuji předem.
Přidáno: 07.02.14 12:23
Prosím o pomoc s následujícím problémem: v buňkách A1, A2, A3 mám vzorce, které se vyhodnocují a na základě vyhodnocení určí nějakou hodnotu, která se vyplní do buňky v které vzorec je. Tzn vzorec v A1 se vyhodnotí a zapíše do A1 hodnotu např. 1 pokud se ale vyhodnotí tak, že A1="", tak potřebuji celý řádek 1 skrýt. To stejné analogicky pro A2, A3. Pokud to bude fungovat jen s tím, že makro bude sledovat hodnotu buňky A1, A2, A3 a v případě hodnoty A1="" skryje řádek 1 tak mi to bohatě stačí, pokud se ale musí reagovat na přímou změnu buňky (jako že v buňce ručně změním hodnotu), tak ta se bude odehrávat akorát v buňce vzorce!B1 vše ostatní je provázáno vzorci. Doufám, že se najde někdo, kdo je ochoten pomoci.
Přidáno: 16.07.14 14:00
Dobrý den, mám na Vás prosbu. Nějaký čas jsem vytvářel celkem obsáhlý excelovský soubor a teď bych rád aby se při ručním spuštění tohoto souboru objevilo okno s informacemi kdo tento soubor vytvářel a jak jej kontaktovat. Celkem slušně se pohybuj na poli vzorců, ale makra a VBA jsou mi zatím cizí. Prosím Vás tedy o pomoc. Děkuji.
Přidáno: 16.07.14 18:49
To Poncijak: Jak je uvedeno v článku, po spuštění zobrazit dialogové okno:
Private Sub Workbook_Open()
MsgBox "Autor: Pavel Lasák http://office.lasakovi.com"
End Sub
Více o dialovovém okně jsem sepsal v článku: VBA - msgbox - dialogové okno
Přidáno: 24.07.14 07:18
Dobrý den, děkuji za odpověď. Tápal jsem nad pojmem "ThisWorkbook" ale po několika nezdarech jsem vytvořil co jsem potřeboval. Mám ale jěště jeden dotaz.. Je možné do tohoto vyskakovacího okna vložit vlastní obrázek, nebo fotku? Děkuji.
Přidáno: 24.07.14 07:44
Dobrý den, tak problém vyřešen.. Použil jsem Dialog a okno vyskakuje s textem i obrázkem. Velice děkuji za pomoc a za tento web.
Přidáno: 19.01.15 09:15
Ahoj, chtěl bych se zeptat, zda neexistuje podobná funkce při uzavření sešitu. Něco jako "Auto_close"? Jde mi o to, že potřebuji vytvořit ověření, zda nejsou určité buňky prázdné. Vytvoření makra není problém, jde mi o to, jak ho chytře spustit tak, aby se pouštělo třeba při ukládání, nebo uzavírání sešitu. Děkuji za typ.
Přidáno: 22.01.15 07:45
To Honza K,:Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
ALEBOPrivate Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
End Sub
Přidáno: 22.01.15 10:24
Díky, Zrovna chci napsat, že jsem "vygooglil" tu druhou variantu :-). Zkusím i tu první.
Přidáno: 06.02.15 08:22
Ahoj Pavle, předem děkuji za tyto super stránky. Měl bych na Tebe dotaz, potřebuji měnit vzorce v buňkách (B1-B5) v závislosti na hodnotě buňky (A1), vzorce se mění ihned při změně hodnoty. Na stránkách Microsoftu jsem našel následující návod, až sem tedy vše jasné, viz odkaz http://support.microsoft.com/kb/213612/en-us Problém nastává, když daný list, třeba "abc", vytvářím automaticky pomocí jiného makra. Aby následující postup fungoval musí být kód z návodu vložen do module sheet listu "abc", potřebuji tedy postup jak vložit kód přímo do listu "abc" už při vytvoření. Hodnota buňky sheets("abc").range("A1") neovlivňuje buňky na jiných listech. Popř. dá se to zařídit nějak jednodušeji? Díky za odpověď
Přidáno: 19.02.15 16:00
Dobrý den. Narazil jsem pro mě na pořádný oříšek jsem amatér, ale jde mi o to že máme jednu tabulku vytvořenou google excelem, protože se na ni vztahuje formulář prostě taková databáze s informacemi. Mohly by jste mi poradit jak otevřít pomocí makra nebo hypertextem chtěl bych to vložit do makra co dále provádí další činnosti tabulka se otvírá nesčetněkrát denně. Díky za pomoc nebo rady
Přidáno: 27.02.15 14:50
Mám makro např. Sub Hide. Následně chci, aby se spustilo po otevření sešitu, ale kód níže mi nefunguje, respektive po otevření sešitu se nespustí. Oboje je v uloženo ve stejném Modulu. Nepomáhá ani Call. Když jsem přímo v editoru a ručně makro spustím, tak funguje. Díky za radu. Private Sub Workbook_Open() Application.Run "Hide" End sub
Přidáno: 01.05.16 16:29
Potřeboval bych zřetězit řadu xlsm souborů, vždy když jeden skončí tak zavolá další, ale potřebuji, aby ten volající byl zavřen. Pokud použiji RUN, tak vždy po zavření souboru se makra zastaví. Zkoušel jsem: V souboru A.xlsm je toto: Sub auto_open() MsgBox "auto_open()" End Sub Private Sub Workbook_Open() MsgBox "Workbook_Open()" End Sub Pokud odklepnu ručně, pak napíše auto_open(). Pokud otevírám z jiného souboru příkazem workbook.open("cesta & A.xlsm"), pak se soubor A otevře, ale nespustí se žádné makro - nenapíše nic! Jak na to? Díky
Přidáno: 13.05.16 07:51
Dobrý den, nejprve bych poděkovat za obsáhlé návody. Potřeboval bych udělat jednoduchou věc avšak docela záludnou a nevím jestli to vůbec půjde udělat. Jde o to, že mám pro jinou aplikaci doplněk v Excelu(který není editovatelný ale je to přímo dll knihovna), který do Excelu vytvoří tabulku ve které změním/přidám řádky a zase se to z této tabulky znova importuje do daného programu. Toto všechno funguje dobře. Já potřebuji jen udělat maličkost aby se sloupce automaticky přizpůsobily velikosti textu uvnitř, protože tento doplněk nechává sloupce zbytečně velmi široké. Problém je v tom, že po spuštění doplňku se otevře zcela nové okno, nelze si tedy připravit xlsm soubor, zkoušel jsem aktivovat dané nové okno, což se podařilo, ale následně přizpůsobení sloupců se neprovedlo v tomto aktivním okně ale v původním ze kterého bylo makro spouštěno. Dá se toto vyřešit? Doufám, že chápete o co se jedná. Vím jak se přizpůsobí sloupce, mě jde jen o to jak to udělat v jiném neuloženém novém sešitu, který se vygeneruje až tím doplňkem. Děkuji.
Přidáno: 23.08.16 17:59
Dobry den, super web. Mam dotaz. Mam existujici makro, ktere z tabulky generuje po zmacknuti tlacitka dalsi tabulku s prehledy. Problem je, ze v te nove vygenerovane tabulce nejsou aktualizovana data. Je tam nutne neco spoustet, aby se ty data aktualizovala, nebo je tam automaticky update, ktery teda ale nefunguje? dekuji
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
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 |