Dynamická velikost grafu

Tento článek není úplně originální. Popisuje možnost změny velikosti zobrazení jednoho či více grafů, které jsou kupříkladu v malé velikosti poskládané na nějakém listu sestavy (typicky dashboard).

Dynamické zvětšení grafu
Dynamické zvětšení grafu

Klepnutí na graf funguje jako přepínač mezi výchozí a požadovanou velikostí.

Dynamické zvětšení grafu
Dynamické zvětšení grafu

Obslužný kód propojíme s objektem grafu výběrem volby Přidat makro z kontextové nabídky pro graf. Proceduru je možné aplikovat na libovolný graf listu.

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
Sub GrafMeritko()

    'původní výška grafu
    '= výška jednoho řádku v bodech krát počet řádků
    Const csngVyskaStandard As Single = 150
   
    'původní velikost písma
    Const csngFontVelikostStandard As Single = 10
   
    'měřítko (zde dvojnásobné zvětšení)
    Const csngMeritko As Single = 2

    'název grafu volající proceduru
    strObjektNazev = Application.Caller
   
    'nastavení objektové proměnné
    Set objGraf = ActiveSheet.Shapes(strObjektNazev)

    With objGraf
   
        'změna výšky
        .Height = ((csngMeritko + 1) * csngVyskaStandard - .Height)
       
        'změna velikosti písma
        .Chart.ChartArea.Font.Size = (csngMeritko + 1) * _
            csngFontVelikostStandard - .Chart.ChartArea.Font.Size
           
    End With

End Sub

Práce s kolekcí Shapes a vůbec její vláda nad objekty listu je přinejmenším prazvláštní. U grafických objektů bychom nalezli metodu ScaleHeight, případně ScaleWidth, bohužel graf patří mezi typy, u kterých nelze aplikovat změnu oproti původní velikosti (parametr msoTrue), takže Microsoftu můžeme jen poděkovat a vrátit se k prosté změně vlastností Height (Width). V kódu je vidět, že je pouze „hromadně“ měněna velikost užitého fontu v grafu. ChartArea představuje prakticky celou plochu okna grafu, ChartArea.Font není v nápovědě rozepsán. Zkušenost je taková, že kód přepíná velikost písma pro všechny textové prvky Zobrazované oblasti (PlotArea) mezi 10 a 20 a to bez ohledu na velikost některého z textů před změnou, zatímco velikost písma v názvu grafu se mění v měřítku (původní versus dvojnásobné zvětšení). Při testování jsem narazil také na jednu chybu. Excel (2010) v celém grafu nemění jen velikost písma, ale také jeho barvu (barevnost pozadí drží). Výjimku tvoří barva písma, která je předurčena stylem grafu (viz Nástroje grafu, kontextová karta Návrh a skupina Styly grafů). Nechcete-li, aby se při změně velikosti grafu měnila na osách minima, maxima a jednotky, nastavte jejich pevné meze. Pro úplnost dodávám, že ručně okno grafu napasujete do mřížky při držení klávesy Alt během změny jeho velikosti či přesunu. Poměr stran grafu je zamčen předem, proto není nutné starat se o druhý rozměr grafu a pracujeme tak jen s výškou (Height).