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

Jste zde: Úvodní stránka » excel » vba-priklady-kodu » vba-excel-automaticke-spusteni-skriptu

Excel VBA - automatické spuštění skriptu

Videokurzy Excel

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.

Úvod

Chceme-li aby při spuštění MS Excel vykonal nějakou činnost. Máme volbu:

  • Provedení skriptu pokaždé - tj. pokud soubor bude spuštěn ručně, nebo vzdáleně skriptem.
  • Provedení skriptu jen při ručním spuštění - tj. pokud soubor bude spuštěn skriptem nebude požadovaná činnost vykonána.
  • Provedení skriptu automaticky - pouze při otevření skriptem.

Automatické spuštění skriptu při otevření sešitu

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

Automatické spuštění skriptu při "ručním" volání.

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

Spuštění skriptu v souboru volaným skriptem.

Kód doplnit do skriptu, který tento soubor volá...

Závěr

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

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


Pavel Lasák

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

Ondřej

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

Pavel Lasák

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

Ondřej

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.

Pavel Lasák

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"

Ondřej

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

Pavel Lasák

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"

Pavel Lasák

Přidáno: 20.03.11 10:15

To Ondřej: ukázka http://www.uloz.to/8356028/ukonci-excel-xlsm

Ondřej

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.

Pavel Lasák

Přidáno: 22.03.11 19:01

To Ondřej: tak i ve verzi 97... http://www.uloz.to/8388545/ukonci-excel-xls

fugisk

Přidáno: 08.01.12 16:14

daju sa pouzit i makra : Sub auto_open() ... Sub auto_close() ...

Pavel Lasák

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.

Karel

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.

Pavel Lasák

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

Zbynek

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.

Pavel Lasák

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

Pavel Lasák

Přidáno: 06.03.12 14:41

Spuštění skritpu v jiném sešitě: Application.Run "jiny.xlsm!MojeMakro"

Petr J

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

Pavel Lasák

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ář?

Petr J

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.

Pavel Lasák

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

Petr J

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

Jirka

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.

Pavel Lasák

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

Jirka

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.

Jirka

Přidáno: 09.01.13 17:29

Omlouvám se nějak se mi to smíchalo dohromady

Pavel Lasák

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.

Jirka

Přidáno: 09.01.13 23:15

Díky moc za Váš čas

Jirka

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.

Pavel Lasák

Přidáno: 10.01.13 16:20

To Jirka: Rádo se stalo, jsem rád, že funguje.

Venca

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.

Adam

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.

Poncijak

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.

Pavel Lasák

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

Poncijak

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.

Poncijak

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.

Honza K,

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.

Jojo

Přidáno: 22.01.15 07:45

To Honza K,:Private Sub Workbook_BeforeClose(Cancel As Boolean) End SubALEBOPrivate 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í.

Ondra

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ěď

pospik

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

ZZ

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

Brodský

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

Igor

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.

Martin

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







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 |