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

Jste zde: Úvodní stránka » excel » vba-triky » vba-excel-ukonceni-makrem

Ukončení aplikace (uzavření sešitu) - Excel VBA

Videokurzy Excel

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

Jak ukončit práci Excelu, případně sešitu. Excel se sám ukončí ... aneb jak někoho zmást :)

Doplněno 10.4.2013

Microsoft Excel VBA logo

Úvodem

V článku se dozvíte jak lze pomocí VBA ukončovat otevřené sešity, nebo uzavřít přímo aplikaci Microsoft Excel. Článek je rozdělen na tyto kapitoly:


Zavření aktuálního sešitu

Zavře aktivní sešit a umožňí uživateli rozhodnout, zda případné změny, mají být uloženy.

ActiveWorkbook.Close

Zavřít sešit bez uložení změn.

ActiveWorkbook.Close False ' Zavře aktivní sešit bez uložení změn ' možno zapsat i takto ' ActiveWorkbook.Close SaveChanges:=False

Zavřít sešit a uložit změny.

ActiveWorkbook.Close True ' Zavře aktivní sešit a uloží všechny změny ' další možnost uložení ' ActiveWorkbook.Close SaveChanges:=True

Další možná doplnění

' Zabranění zobrazení systemových hlášek Application.DisplayAlerts = False

Zavření zvoleného sešitu

Chceteli zavřít určitý sešit (neaktivní)

Workbooks("sesit.xls").close False ' Workbooks("sesit.xls").Close SaveChanges:=False

Ukončení aplikace Excel

Ukončení aplikace Excel se provede příkaze Application.Quit

Application.Quit

Automatické ukončení aplikace Excel

Potřebujeme za 30 vteřin po spuštění makra ukončit Excel. Řešení je jednoduché. Použijeme v prvním makru funkci OnTime, která po 30 vteřinách spustí druhé makro s funkcí pro vypnutí (a zamezení chybových hlášek).

Kód se skládá ze dvou části:

Část 1

Sub Ukonci30sec() Application.OnTime Now + TimeValue("00:00:30"), "MujKonec" End Sub

Část 2

Sub MujKonec() Application.DisplayAlerts = False Application.Quit End Sub

Závěrem

Využíváte automatické ukončování vašich sešitů?

Č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


Jindra Střelec

Přidáno: 10.04.13 11:33

Dobrý den, existuje makro, aby se uzavřel jen jeden z otevřených sešitů? jindra.strelec(at)tiscali.cz

Pavel Lasák

Přidáno: 10.04.13 16:11

To Jindra Střelec: Jasně ActiveWorkbook.Close bez dotazu na uložení ActiveWorkbook.Close False

Petr Pecháček

Přidáno: 10.04.13 19:04

Pro uchlácholení Excelu, že má vše uloženo, se dá také použít ActiveWorkbook.Saved = True. Automatické ukončení sešitu nepoužívám. Zpravidla je totiž potřeba automaticky sešit 1. otevírat, 2. nechat proběhnout makro a za 3. sešit uzavřít. Tj. automatizaci úlohy musí zajistit externí skript (naplánovaná úloha ve Windows, VBScript, dnes možná i PowerShell). Stávalo se, že Excel zůstával pro rozběhnutí skriptu "viset" a jedině v takovém případě bych viděl smysl ukončení Excelu po časové prodlevě. Jinak je to docela riziková věc a jsem pro korektní uzavírání sešitu na konci práce (tj. bez OnTime). OnTime ani nemusí v případě zaneprázdnění Excelu proběhnout. Přes API se nechá zajistit i pozdržení kódu VBA, dokud neproběhne jiný proces. V průběhu dlouhého procesu je rovněž dobré dát systému šanci provést si jeho úlohy (Do Events uvnitř cyklu). Jinak je možné naprogramovat i sebedestrukční makro v sešitu ve stylu Mission Impossible.

Jindra Střelec

Přidáno: 11.04.13 12:42

Děkuji za bleskovou reakci ;-) Pro mojí potřebu bohatě postačuje: "Zavřít sešit bez uložení změn."

Pavel Lasák

Přidáno: 11.04.13 16:02

To Jindra Střelec: Nemožné hned, zázraky na počkání ;)

Pavel Lasák

Přidáno: 13.04.13 08:19

To Petr Pecháček: Děkuji za doplnění.

miriam

Přidáno: 21.08.13 11:40

Dobrý deň mam naprogramované makro na overenie hesla cez internetový portál ale neviem ako zabezpečiť aby sa excelový zošit uzavrel ak sa daná hláška len zlodí bez vyplnenia a potvrdenia odoslania na overenie.

Vladimír

Přidáno: 04.10.13 06:22

Ahoj, poraďte prosím: jak dosáhnu, aby ve furmulářovém oknu byl zobrazen údaj z buňky a nedal se přepsat. Jak zapsat do formulářového okna funkci (opět nepřepsatelnou) např. DNES. Jak zajistit, aby form. okno vyplnilo celou obrazovku na jakémkoliv monitoru? děkuji kemars@volny.cz

PAVEL

Přidáno: 31.01.14 09:19

Dobrý den. Prosím o radu ohledně provedení aktualizace dat v zavřeném souboru. Jedná se o to, že mám sešit 1, který čerpá data ze sešitu 2 a ten další data ze sešitu 3. Pokud se mi změní data v sešitu 3 a sešit 2 neotevřu a nezaktualizuji data, tak se mi v sešitu 1 data neobjeví. Děkuji za radu.

Zdeněk

Přidáno: 22.04.14 10:14

Dobrý den, vytvořil jsem si makro kdy čerpám informace z jiného sešitu ten si otevřu v rámci makra, provedou se všechny procedury a na konci mi excel zamrzne na příkazu, kerý uzavírá sešit, z kterého jsem čerpal data. To se děje, když makro spustím F5, když jsem hledal chybu po jednotlivích částech, pomocí F8, tak vše proběhne jak chci a chyba se neprojeví. Zkoušeno v Office 2013, zkoušel jsem i příkaz(na zavření sešitu), který se mi uložil při nahrávání makra a byl formulovaný jinak. Setkal jste se s tím někdy někdo? Moje domněnka je, že má proběhnout něco v rámci excelu, ale jelikož je to tak rychlí tak se to kousne. Jinak ještě doplním, že sešit z daty, z kterého čerpám, se otvírá pouze pro čtení.

Zdeněk

Přidáno: 26.05.14 08:17

Tak problém vyřešen tím že před příkaz zavření sešitu vložen s příkazem který zobrazí že se sešit bude zavírat. Po tom to příkazu jde už vše správně.

Honza

Přidáno: 23.07.14 10:00

Dobrý den, jak lze zjistit, je-li ještě nějaký sešit otevřený abych mohl pak zavřít celý Excel? Děkuji

Veronika

Přidáno: 14.07.16 10:46

Dobrý den, vytvořila jsem makro pro automatické zavření po 15 minutách Application.OnTime Now + TimeValue("00:15:00"), "Konec" Toto normálně funguje, ale pokud zavřu sešit o něco dříve, tak se mi v daný čas soubor otevírá, aniž bych se o to snažila. Děkuji za radu

Jojo

Přidáno: 15.07.16 07:12

To Veronika: -- Predčasné ukončenie OnTime(Netestované): Vložiť do bežného modulu: Public dTime As Date Sub RunOnTime() dTime = Now + TimeValue("00:15:00") Application.OnTime dTime, "Konec" End Sub Vložiť do modulu ThisWorkbook: Private Sub Workbook_BeforeClose(Cancel As Boolean) 'CancelOnTime Application.OnTime dTime, "Konec", , False End Sub

Veronika

Přidáno: 29.07.16 06:54

Moc děkuji za odpověď, již to funguje jak má

Venca

Přidáno: 30.08.16 12:55

Zdravím, mám problém, u kterého netuším jak dál. Mám soubor ve kterém se pouští automaticky po zpuštění Form do kterého načítám data. Po potvrzení ve formuláři otevře dle podmínek další soubor a schovám Form menu abych mohl v souboru pracovat. Potreboval bych aby se po zavrení souboru se opět otevřelo Formmenu. Díky







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 |