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.
[download id=”1325″]

Klikni a stahuj!