'je zobrazen stavový řádek? blnstavovyradekzobrazen = Application.DisplayStatusBar. Excel stavový řádek

Podobné dokumenty
Excel Board příprava. ProExcel.cz Excel Board výuková a prezentační tabule pro Excel 1

Tabulka obsluhovaná kódem VBA

Na úvod tip, jak kontrolovat šířku tabulky před a po změně. Chování makra ukazují obrázky. Jak změnit rastr v hotové tabulce Excelu

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

OBSAH Úvod do VBA... 6 K čemu VBA... 6 Když VBA nestačí... 6 Historie Visual Basicu... 7 Objektový model, vlastnosti, metody, události a funkce...

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Kurz Databáze. Obsah. Formuláře. Práce s daty. Doc. Ing. Radim Farana, CSc.

8 Makra Příklad 4 Excel 2007

MS Excel makra a VBA

Obsah. Základy práce s databází 13. Tabulky 43. Obsah. Úvod 9 Poděkování 12

VÝŘEZ OBLASTI BUNĚK VZORCEM

Generátor list nastavení

Různé barvy v grafu pro skutečnost a plán

3MA481 Propojení Accessu a Excelu David Hach

Obsah Úvodem... 5 Co je to vlastně formulář... 6 Co je to šablona... 6 Jak se šablona uloží... 6 Jak souvisí formulář se šablonou...

Tematický celek 03 - Cvičné příklady

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

VISUAL BASIC. Přehled témat

V článku Skrytý obsah na listu (1) jsme se zabývali obecnými možnosti skrývání obsahu. Dnes se na dané téma podíváme prakticky.

VISUAL BASIC. Práce se soubory

Spojování textových řetězců na listu

V praxi je běžné, že se ovlivňuje více prvků navzájem. Tady už si s jednou globální proměnnou nevystačíme.

Formátování dat EU peníze středním školám Didaktický učební materiál

Odstranění řádků (na základě hodnoty)

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Odstavení automatického zpracování hypertextových odkazů

01. HODINA. 1.1 Spuštění programu VB Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Kontingenční tabulky v MS Excel 2010

Úvod do MS Access. Modelování v řízení. Ing. Petr Kalčev

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

V této aplikaci si ukážeme jakým způsobem zobrazovat čas a datum. Pro ovládání zobrazení času a datumu se naučíme využívat nabídku.

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

Výběr složek a souborů ve VBA

První cestou, jak vynechat jakákoliv data v grafu, je jejich skrytí, ať už přímo či filtrem aplikovaným na řádcích.

Excel - databáze. Opakování. Soubor, který jsme upravovali. Upravený soubor. Hrubá mzda = počet kusů * Kč za kus B6=B4*B5

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Informační a komunikační technologie pro učební obory ME4 a SE4. Makra

ČÁST 1. Základy 32bitového programování ve Windows

Jak vložit obrázek do oblasti buněk

Databáze pro evidenci výrobků

10 Algoritmizace Příklad 2 Word 2007/ VBA

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Článek je napsán pro českou verzi Excelu 2010, ale věřím, že i v jných verzích si dovedete poradit.

Spuštění a ukončení databázové aplikace Access

Microsoft Access tvorba databáze jednoduše

Hromadná změna datumu a času v buňkách

DUM 06 téma: Tvorba makra pomocí VBA

Tabulka aneb Seznam čili ListObject

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Evidence objednávek pečiva

Různé barvy v grafu pro skutečnost a plán

8. Formátování. Úprava vzhledu tabulky

Slíbená princezna. Univerzální ComboBox

Projekt Využití ICT ve výuce na gymnáziích, registrační číslo projektu CZ.1.07/1.1.07/ MS Excel

2. Umístíme kurzor kamkoliv do tabulky, otevřeme nabídku Data Filtr a potvrdíme myší příkaz Rozšířený filtr.

ZŠ ÚnO, Bratří Čapků 1332

Obsahy kurzů MS Office

MS Excel 2007 Kontingenční tabulky

ZSF web a intranet manuál

MsgBox, InputBox, FileDialog, Pravomoci vlastních funkcí (UDF) Function TESTOVKA() 'dialog (MsgBox) TESTOVKA = MsgBox("Baf!

Tiskové sestavy. Zdroj záznamu pro tiskovou sestavu. Průvodce sestavou. Použití databází

Tabulkový procesor otázka č.17

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Tabulkový procesor. Orientace textu. O úroveň níž O úroveň výš

Pracovní prostředí Excel 2010

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 4. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Visual Basic for Application

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Excel 2007 praktická práce

Cvičné příklady Hodina 2

Efektivní práce s Excelem (středně pokročilí uživatelé)

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

Začínáme pracovat s tabulkovým procesorem MS Excel

Řešení. ŘEŠENÍ 36 Výsledková listina soutěže

Níže uvedená tabulka obsahuje technické údaje a omezení aplikace Excel (viz také článek Technické údaje a omezení aplikace Excel (2007).

Panely pro práci s barvami a ohraničením v Excelu 2003 a 2010

Jak definovat pravidlo pro více buněk naráz

Ukázka knihy z internetového knihkupectví

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Pracovní sešit MS Word pokročilý

Novinky v programu SKLADEK

CZ.1.07/1.5.00/

Supernova 16 Ovládací zkratky. Akce Funkce Stolní počítač Přenosný počítač Automatické popisování grafických objektů LEVÝ CONTROL + PRAVÁ HRANATÁ

Vlastní formát buňky. Vytvoření nebo odstranění vlastního formátu čísla

JAK DEFINOVAT PRAVIDLO PRO VÍCE BUNĚK NARÁZ

Dialog Vzhled stránky

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Vytvoření tiskové sestavy kalibrace

Access. Tabulky. Vytvoření tabulky

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Star Trek Do temnoty (infografika na panelu)

Pokud Windows 8 nemáte, můžete si situaci nasimulovat i ve Windows 7 a starších.

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Návod k použití programu Business Plan

INFORMATIKA MS WORD ODRÁŽKY A ČÍSLOVÁNÍ

Transkript:

Zatímco StatusBar je ovládací prvek představující stavový řádek, ProgressBar je narůstající sloupeček určený například pro zobrazení průběhu instalace. Microsoft je přitom na instalace expert. Nejprve doháněl uživatele k šílenství tím, že ProgressBar po dosažení 0 % začal opakovaně plnit zase od nuly, později tak, že z ProgressBaru udělal cosi jako policejní maják z amerických filmů, a dnes k tomu využívá textové žvásty (aktualizace se stahují, probíhá příprava na aktualizacích, procenta, nakonec vše je téměř dokončeno, a pak stejně ještě čekáte, až zahřmí). Stavový řádek už v Excelu přeci jeden máme. Učebnicově je považován za nejlepší místo, kde zobrazit průběh delšího výpočtu, makra, atp. Základní ovládání ukazuje následující procedura. Sub StavovyRadekObecne() 'je zobrazen stavový řádek? blnstavovyradekzobrazen = Application.DisplayStatusBar 'zobrazení stavového řádku Application.DisplayStatusBar = True 'zobrazení vlastního textu ve stavovém řádku Application.StatusBar = "Probíhá výpočet..." 'nevhodný (nefunkční) reset stavového řádku 'Application.StatusBar = "" 'Application.StatusBar = vbnullstring 'korektní reset stavového řádku Application.StatusBar = False Excel stavový řádek Pokud v cyklu VBA provádíme delší výpočty, je vhodné informovat o stavu detailněji. ProExcel.cz

0 Sub StavovyRadekPrubeznyStav() Dim lngpocet As Long 'počet cyklů lngpocet = 000 For i = To lngpocet 'prostor pro zpracování systémových událostí DoEvents 'změna textu ve stavovém řádku Application.StatusBar = "Probíhá zpracování záznamu č. " & i & _ " z celkového počtu " & lngpocet & "." 'reset stavového řádku Application.StatusBar = False Excel průběh ve stavovém řádku Je možné umístit informaci o průběhu jinam? Teoreticky je možné s využitím API přiřadit bublinu s textem do vlastní ikony v oznamovací části systémové lišty. Ta ale není určena k tomu, abyste do ní několikrát za sekundu prali text. Takže co s tím? Co zkusit měnit text v titulku okna? Titulek v aplikaci Excel sestává při maximalizovaném okně sešitu ze dvou částí z názvu sešitu a názvu aplikace (např. Sešit.xlsm Microsoft Excel). ProExcel.cz

Excel titulky v oknech Pojďme tedy informaci o stavu úlohy umístit do titulku. Sub TitulekAplikacePrubeznyStav() For i = To 00 'prostor pro zpracování systémových událostí DoEvents 'změna textu ve stavovém řádku Application.Caption = "Probíhá zpracování záznamu č. " & i & _ " z celkového počtu 00." 'reset stavového řádku Application.Caption = vbnullstring ProExcel.cz

Excel zobrazení průběhu v titulku okna aplikace Zástupce sešitu na systémové liště přebírá titulek okna do svého popisku. Nesmíte ovšem mít nastavené seskupování zástupců (pravé tlačítko myši na liště a volba Vlastnosti). Windows seskupování zástupců na systémové liště Není mi úplně jasný princip, podle kterého je v zástupci stanoveno pořadí dvojice název aplikace aktivní sešit. Jednou je to tak, podruhé opačně. Ve Windows. se mi také stává, že občas jedno z ProExcel.cz

oken sešitů o svého zástupce v systémové liště přijde a popisek v něm pak neodpovídá situaci. A do třetice, zástupce běžně pojme maximálně - znaků z celého titulku (velikost je tuším možné měnit v registrech). Přes to všechno jsem se pustil do experimentu, kdy aplikaci minimalizuji (v průběhu běžícího makra nám stejně není k užitku) a změnu titulku okna (aplikace) promítám právě do jejího zástupce. 0 0 0 Sub ZastupcePrubeznyStav() Dim lngstavoknosesit As Long Dim lngstavoknoaplikace As Long Dim wndokno As Window Set wndokno = ActiveWindow 'uložení stavu okna sešitu lngstavoknosesit = wndokno.windowstate 'maximalizace okna sešitu wndokno.windowstate = xlnormal 'uložení stavu okna aplikace lngstavoknoaplikace = Application.WindowState 'minimalizace okna aplikace Application.WindowState = xlminimized For i = To 000 'prostor pro zpracování systémových událostí DoEvents 'změna titulku v okně sešitu (zástupci na liště) Application.Caption = "č. " & i & " z 000" 'reset titulku okna sešitu wndokno.caption = False 'reset titulku okna aplikace Application.Caption = vbnullstring 'návrat k původnímu stavu okna sešitu wndokno.windowstate = lngstavoknosesit 'návrat k původnímu stavu okna aplikace Application.WindowState = lngstavoknoaplikace ProExcel.cz

Excel zobrazení průběhu v zástupci na liště Vizuálně zajímavější možnost zobrazení průběhu představují právě ProgressBary. Nasimulujeme si první z nich ve stavovém řádku. Vystačíme si přitom s vhodným znakem Unicode sady. 0 0 0 Sub StavovyRadekProgressBar() Dim intpocetznakumax As Integer Dim intpocetznaku As Integer Dim lngpocetcyklu As Long Dim sngprocento As Single 'maximální počet znaků ve stavovém řádku (0 %) intpocetznakumax = 0 'počet cyklů (záznamů ke zpracování, výpočtů,...) lngpocetcyklu = 0000 For i = To lngpocetcyklu 'prostor pro zpracování systémových událostí DoEvents 'procento plnění sngprocento = CInt(( * i) / lngpocetcyklu) 'počet znaků odpovídajících procentu plnění intpocetznaku = CInt(intPocetZnakuMax * sngprocento / ) 'změna textu ve stavovém řádku If intpocetznaku > Then 'zobrazení procenta a symbolů kostičky 'nespojité kostičky... &HFC Application.StatusBar = Format(sngProcento, "00") & " % " & _ String(intPocetZnaku, ChrW("&H")) End If 'reset stavového řádku Application.StatusBar = False ProExcel.cz

Excel simulovaný ProgressBar ve stavovém řádku Historicky starší ProgressBary používali oddělené čtverečky. Zde je tedy ještě jeden způsob. 0 0 0 0 Sub StavovyRadekProgressBar() Dim intpocetznakumax As Integer Dim intpocetznaku As Integer Dim lngpocetcyklu As Long Dim sngprocento As Single Dim strprocento As String 'maximální počet znaků ve stavovém řádku (0 %) intpocetznakumax = 0 'počet cyklů (záznamů ke zpracování, výpočtů,...) lngpocetcyklu = 0000 'třímezerová maska strprocento = Space() For i = To lngpocetcyklu 'prostor pro zpracování systémových událostí DoEvents 'procento plnění sngprocento = CInt((0 * i) / lngpocetcyklu) 'dosazení procenta do masky (mezery zleva) RSet strprocento = CStr(sngProcento) 'počet znaků odpovídajících procentu plnění intpocetznaku = CInt(intPocetZnakuMax * sngprocento / 0) 'změna textu ve stavovém řádku If intpocetznaku > Then 'zobrazení procenta a symbolů kostiček Application.StatusBar = strprocento & " % " & vbtab & _ String(intPocetZnaku, ChrW("&HFC")) & String(intPocetZnakuMax - _ intpocetznaku, ChrW("&HFB")) End If 'reset stavového řádku Application.StatusBar = False ProExcel.cz

Excel simulovaný ProgressBar ve stavovém řádku Dalším tipem budiž buňka s aplikovaným podmíněným formátem Excel simulace ProgressBaru buňkou a podmíněným formátem ProExcel.cz

0 Sub BunkaProgressBar() Dim lngpocetcyklu As Long Dim sngprocento As Single 'počet cyklů (záznamů ke zpracování, výpočtů,...) lngpocetcyklu = 0000 For i = To lngpocetcyklu 'prostor pro zpracování systémových událostí DoEvents 'procento plnění sngprocento = CInt((0 * i) / lngpocetcyklu) If i Mod 00 = 0 Then Range("rngProgressBar").Value = sngprocento End If Excel ProgressBar v buňce v akci Na internetu lze nalézt návody, jak vytvořit skutečný ProgressBar třeba na místě stavového řádku nebo v Řádku vzorců a to s pomocí API. Zde se tím zabývat nebudeme. I tak jsme si ukázali řadu vizuálních hraček. Nyní ovšem přijde pořádná herda do zad. Průběh stavu má smysl ukazovat ProExcel.cz

tehdy, když je výpočet zdlouhavý (např. v cyklu zpracováváme tisíce záznamů). V takovém případě jak jistě víte používáme syntaxi Application.ScreenUpdating = False. Pokud ta ale bude plnit svou funkci, pak přeci k žádnému překreslování textu někde ve stavovém řádku dojít nemůže! Jenže ouha. I když ji v kódu aplikujeme, změnu ve stavovém řádku uvidíme (překreslování bude doprovázeno flickeringem, tj. problikáváním textu). Možná také víte, že v dlouhých cyklech je dobrých zvykem užít klauzuli DoEvents, kterou říkáme dej taky prostor systému, ať si udělá to svoje. Udělal jsem tedy řadu testů a nestačil se divit. V tabulkách je zachycena průměrná doba běhu procedury v sekundách s různými obměnami podmínek (ScreenUpdating, DoEvents, bez výpisu, s výpisem do stavového řádku, titulku okna sešitu a titulku okna aplikace). Excel testy ScreenUpdating a DoEvents Poznatky ScreenUpdating neumí částečné zmrazení okna, a proto, pokud zasahujeme do stavového řádku, ProExcel.cz

zapíná se (časy jsou prakticky stejné). Jinak je jeho funkčnost srovnatelná s API funkcí LockWindowUpdate (velmi pravděpodobně ji na pozadí používá). Příkaz DoEvents sice zpomalí průběh procedury, ale bez něj je jakýkoliv pokus o výpis bezpředmětný (překreslování velmi brzy zamrzne). Překreslování titulku (nemaximalizovaného) okna sešitu doprovází vždy flickering. Stejně tak k němu pokaždé dochází v rámci stavového řádku při Application.ScreenUpdating = True. Když se podíváte na čas bez všech serepetiček a srovnáte ho s ostatními, asi dojdete ke stejnému závěru, že jakákoliv nutnost překreslování vede k řádově jiným časům vykonání kódu (v příloze se můžete vyzkoušet). Znamená to, že máme na výpisy průběhu zapomenout? Ve smyslu výše uvedených technik ano. Asi nejschůdnější řešení vede mimo Excel logování průběhu do textového souboru. 0 0 Sub LogovaniPrubeznyStav() Dim ifile As Integer Dim strsoubor As String Dim strobsah As String 'generované číslo 'pod kterým se později na soubor odkazujeme ifile = FreeFile 'cesta a soubor strsoubor = ThisWorkbook.Path & "\log.txt" 'otevření souboru pro přidávání záznamů na konec souboru Open strsoubor For Append Access Write As ifile For i = To 000 'prostor pro zpracování systémových událostí DoEvents 'sestavení obsahu strobsah = "Záznam č. " & i & " z 000." & vbcrlf 'zápis do souboru Print #ifile, strobsah; 'uzavření souboru Close ifile ProExcel.cz

Procedura v tomto případě zabrala cca 0, s. Do souboru je možné nahlížet i během jeho užívání programovým kódem. Ovládací prvky StatusBar a ProgressBar na formuláři Ve VBA nejsou tyto prvky běžně vidět. Je potřeba při návrhu formuláře klepnout pravým tlačítkem myši na Toolbox, zvolit Additional Controls a vybrat Microsoft StatusBar Control, resp. Microsoft ProgressBar Control. Následuje ukázka užití StatusBaru, ve kterém si zobrazíme aktuální datum a čas, text s informací o průběhu, a stav klávesy CAPS LOCK. A přirozeně nesmí chybět ani obyčejný Label, který svou úlohu splní také s přehledem. Excel a VBA prvek StatusBar ProExcel.cz

0 0 0 0 0 'https://msdn.microsoft.com/en-us/library/aa(v=vs.0).aspx Private Sub UserForm_Initialize() With StatusBar 'přidání čtyř sekcí do prvku StatusBar For i = To.Panels.Add 'datum.panels().style = sbrdate.panels().width = 0.Panels().Bevel = sbrnobevel 'čas.panels().style = sbrtime.panels().width =.Panels().Bevel = sbrnobevel 'příprava pro text.panels().style = sbrtext.panels().alignment = sbrcenter.panels().text = "".Panels().Width = 0.Panels().Bevel = sbrnobevel 'stav klávesy CAPS.Panels().Style = sbrcaps.panels().autosize = sbrspring.panels().bevel = sbrnobevel End With Private Sub UserForm_Activate() Dim lngpocetcyklu As Long Dim strtext As String 'počet cyklů (záznamů ke zpracování, výpočtů,...) lngpocetcyklu = 000 For i = To lngpocetcyklu 'text k zobrazení strtext = "Záznam č. " & i & " z " & lngpocetcyklu 'naplnění prvků StatusBar.Panels().Text = strtext Label.Caption = strtext 'překreslení formuláře Me.Repaint ProExcel.cz

Excel a VBA prvek StatusBar v akci Během prvních testů docházelo k flickeringu u obou prvků. Zatímco Labelu pomohlo navýšení hodnoty ve vlastnosti DrawBuffer formuláře z 000 na 000 až 000, u StatusBaru jsem se jevu nezbavil. Z blíže neznámých příčin překreslování mělo tendenci i vytuhnout. StatusBar tedy není ideální prvek pro častou obměnu textu. Pozn. Ve Windows. se mi nepodařilo v okně Properties využít položku Custom, kde bychom v dialogu nastavili vše, co je uvedeno v události Initialize formuláře výše. Na druhém formuláři nasadíme do akce jak prvek ProgressBar, tak obyčejný prvek Label, u něhož nastavíme barvu pozadí, text skryjeme, a změníme programově pouze šířku. ProExcel.cz

Excel a VBA prvek ProgressBar ProExcel.cz

0 0 0 Private intlabelsirka As Integer Private Sub UserForm_Activate() Dim lngpocetcyklu As Long Dim sngprocento As Single 'počet cyklů (záznamů ke zpracování, výpočtů,...) lngpocetcyklu = 0000 For i = To lngpocetcyklu 'prostor pro zpracování systémových událostí DoEvents 'procento plnění sngprocento = CInt((0 * i) / lngpocetcyklu) 'hodnota do popisku a prvku ProgressBar Label.Caption = sngprocento & " %" ProgressBar.Value = sngprocento 'šířka prvku Label Label.Width = sngprocento * intlabelsirka / 0 Private Sub UserForm_Initialize() 'uložení šířky pro prvek Label intlabelsirka = Label.Width 'nastvení nulové šířky Label.Width = 0 ProExcel.cz

Excel a VBA prvek ProgressBar a Label v akci Příloha: excel-statusbar-progressbar.zip ProExcel.cz