Excel Board (1.0) vznikl jako pokus o komplexnější ovládání okna Excelu. Excel sice disponuje nástrojem Celá obrazovka (viz karta Zobrazení, pro návrat stiskněte ESC), nicméně jsem chtěl zajít dál a dosáhnout skutečného stavu „full screen“. Do určité míry lze některé prvky a jejich zobrazení/skrytí řídit v rámci Možností aplikace Excel. Patří mezi ně Řádek vzorců, posuvníky, ouška listů či stavový řádek. Ovládání Pásu karet (ribbonu) už začíná skřípat a nejlepší cestou je nasadit historické Excel4Macro. To umí pás nejen kompletně skrývat, ale zobrazit jej i ve spodní části okna (do boku jej nedostanete). I tak mi to bylo málo. Chtěl jsem překrývat oknem Excelu systémovou lištu Windows (osobně nesnáším její automatické vyjíždění a skrývání). K těmto účelům už je nutné použít API. V průběhu času se mi vkrádala do hlavy možnost nejen jakési pracovní plochy, ale i režimu, jaký má PowerPoint v bezobslužných prezentacích s časováním, rotace listů či autopřepočet jednoho listu v časových intervalech.
Listy sešitu je potřeba si připravit. Zobrazovaná plocha musí odpovídat rozlišení monitoru. Při nastavování šířky sloupců a výšky řádků se řiďte rozměry v závorkách (pixely). Sešit v příloze je přizpůsoben klasickému rozlišení notebooku 1366 x 768 px. Pro prezentační režim bude plocha odpovídat spíše Full HD (televizoru).
Úvodní procedury pracují s nastavením klávesových zkratek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Private Sub Workbook_Open() Application.OnKey "+^Q", "PrepinacProjektor" Application.OnKey "+^W", "RotaceListu" Application.OnKey "+^1", "Kurzor" Application.OnKey "+^2", "Zahlavi" Application.OnKey "+^3", "RadekVzorcu" Application.OnKey "+^4", "StavovyRadek" End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "+^Q" Application.OnKey "+^W" Application.OnKey "+^1" Application.OnKey "+^2" Application.OnKey "+^3" Application.OnKey "+^4" End Sub |
Režim „List (s automatickým přepočtem)“
– určen kupříkladu pro lektory
– spuštění a ukončení režimu CTRL+SHIFT+Q na požadovaném listu (k vyzkoušení List1 a List4)
– zobrazení/skrytí kurzoru CTRL+SHIFT+1
– zobrazení/skrytí záhlaví řádků a sloupců CTRL+SHIFT+2
– zobrazení/skrytí Řádku vzorců CTRL+SHIFT+3
– zobrazení/skrytí stavového řádku CTRL+SHIFT+4
– interval přepočtu je nastaven v proceduře StartUdalosti
Zobrazení prvků (CTRL+SHIFT+číslo) lze kombinovat.
Autopřepočet listu zajišťují tři procedury a veřejná proměnná. Využita je přitom metoda OnTime pracující „v cyklu“.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 'časový interval pro přepočet listu Private dtCasPrepocet As Date Sub StartUdalosti() 'přepočet po 5 sekundách dtCasPrepocet = Now + TimeSerial(0, 0, 5) Application.OnTime dtCasPrepocet, "PrepocetListu" End Sub Sub KonecUdalosti() Application.OnTime EarliestTime:=dtCasPrepocet, Procedure:="PrepocetListu", _ Schedule:=False End Sub Sub PrepocetListu() ActiveSheet.Calculate Call StartUdalosti End Sub |
Režim „Prezentace“
– určen například pro zobrazení stavu výroby přímo v hale nebo na chodbě prostřednictvím připojeného monitoru (ploché TV)
– spuštění režimu CTRL+SHIFT+W
– ukončení režimu ESC
– interval přechodu mezi listy (nekonečný cyklus) je nastaven v konstantě cintRotacePauza na úrovni modulu modProjektor
Následuje výpis procedury PrepinacProjektor s vlastním „know-how“. Nedoporučuji ji v editoru krokovat, přeci jen se jedná o práci s API funkcemi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | Sub PrepinacProjektor(Optional blnVsechnyListy As Boolean = False) Dim lRet As Long Dim lStyle As Long Dim lRegion As Long Dim aRectDesktopArea As Rect Static bPrepinac As Boolean Static bHlavicky As Boolean 'nastavení přepínače bPrepinac = Not bPrepinac 'handle aplikace hWndApp = Application.hwnd 'handle tabulkové části hWndExcelDesktop = FindWindowEx(hWndApp, 0, "XLDESK", vbNullString) hWndExcel7 = FindWindowEx(hWndExcelDesktop, 0, "Excel7", vbNullString) 'rozlišení monitoru cx = GetSystemMetrics(SM_CXSCREEN) cy = GetSystemMetrics(SM_CYSCREEN) Call SystemParametersInfo(SPI_GETWORKAREA, vbNull, aRectDesktopArea, 0) Application.ScreenUpdating = False If bPrepinac = True Then 'aplikace bez... 'nastavení pozice kurzoru do pravého spodního rohu 'neměl by se zde nacházet objekt s popiskem SetCursorPos cx, cx 'skrytí kurzoru ShowCursor 0 'zjištění stávajícího stylu lStyle = GetWindowLong(hWndExcel7, GWL_STYLE) 'uložení stylu pro obnovu lStyleOld = lStyle 'okraj a titulková lišta lStyle = lStyle And Not WS_THICKFRAME lStyle = lStyle And Not WS_CAPTION 'nastavení stylu lRet = SetWindowLong(hWndExcel7, GWL_STYLE, lStyle) 'překreslení lRet = DrawMenuBar(hWndExcel7) 'zjištění stávajícího stylu lStyle = GetWindowLong(hWndApp, GWL_STYLE) 'okraj a titulková lišta lStyle = lStyle And Not WS_THICKFRAME lStyle = lStyle And Not WS_CAPTION 'nastavení stylu lRet = SetWindowLong(hWndApp, GWL_STYLE, lStyle) 'překreslení lRet = DrawMenuBar(hWndApp) 'Pás karet ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)" DoEvents 'maximalizace okna (přes celý monitor) RetVal = SetWindowPos(hWndApp, HWND_TOPMOST, 0, 0, cx, cy, _ SWP_SHOWWINDOW) With Application 'maximalizované okno .WindowState = xlMaximized 'řádek vzorců .DisplayFormulaBar = False 'stavový řádek .DisplayStatusBar = False End With With ActiveWindow 'záhlaví řádků a sloupců bHlavicky = .DisplayHeadings .DisplayHeadings = False 'vodorovný posuvník .DisplayHorizontalScrollBar = False 'svislý posuvník .DisplayVerticalScrollBar = False 'ouška listů .DisplayWorkbookTabs = False 'měřítko zobrazení .Zoom = 100 End With If blnVsechnyListy = False Then Call ZmenaList(ActiveSheet, True) 'přepočet listu Call StartUdalosti Else Call ZmenaListy(True) End If Else 'aplikace s... 'zobrazení kurzoru ShowCursor 1 'zjištění stávajícího stylu lStyle = GetWindowLong(hWndApp, GWL_STYLE) 'titulková lišta lStyle = lStyle Or WS_THICKFRAME lStyle = lStyle Or WS_CAPTION 'nastavení stylu lRet = SetWindowLong(hWndApp, GWL_STYLE, lStyle) 'překreslení lRet = DrawMenuBar(hWndApp) 'maximalizace okna (do pracovního prostoru) RetVal = SetWindowPos(hWndApp, HWND_NOTOPMOST, 0, 0, _ aRectDesktopArea.Right - aRectDesktopArea.Left, aRectDesktopArea.Bottom _ - aRectDesktopArea.Top, SWP_SHOWWINDOW) With Application 'maximalizované okno '.WindowState = xlNormal '.DisplayFullScreen = False 'řádek vzorců .DisplayFormulaBar = True 'stavový řádek .DisplayStatusBar = True 'povolení rolování .ActiveSheet.ScrollArea = "" 'odemčení listu .ActiveSheet.Unprotect End With With ActiveWindow 'záhlaví řádků a sloupců .DisplayHeadings = bHlavicky 'vodorovný posuvník .DisplayHorizontalScrollBar = True 'svislý posuvník .DisplayVerticalScrollBar = True 'ouška listů .DisplayWorkbookTabs = True End With If blnVsechnyListy = False Then Call ZmenaList(ActiveSheet, False) Call KonecUdalosti Else Call ZmenaListy(False) End If 'Pás karet ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)" End If Application.ScreenUpdating = True RedrawWindow Application.hwnd, ByVal 0&, ByVal 0&, RDW_INVALIDATE End Sub |
Dílčí procedury a deklarace naleznete v přiloženém sešitu. Projekt VBA je odemčen. Pokud dokážete ocenit práci strávenou nad danou nadstavbou Excelu, ozvěte se. Podpoříte tak její případný další vývoj. Děkuji.
Závěrem
Excel Board byl zpracován ve verzi Excelu 2010. Teoreticky je možné jej použít/upravit pro Excel 2007-2016. Je do jisté míry alternativou pro prezentaci v PowerPointu s provázanými tabulkami a grafy Excelu. Neklade si za cíl jej nahradit, neřeší přechody mezi snímky (a ani nemůže), individuální časování snímků atp. Automatický přepočet listu, resp. načasovaná opakující se událost může zajistit aktualizaci dat řešenou jinak (např. technologií Real Time Data).
Příloha:
Sešit testujete na vlastní zodpovědnost.
excel_board.zip