Excel Board – výuková a prezentační tabule pro Excel

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

Excel Board - příprava
Excel Board – příprava
Excel Board - po spuštění (skutečný full screen)
Excel Board – po spuštění (skutečný full screen)

Ú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

Excel Board - full screen - možnosti zobrazení v režimu List
Excel Board – full screen – možnosti zobrazení v režimu List

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