| Od: |
Vladimír |
| Datum: |
5.6.2010 17:36 |
| Předmět: |
Poloha MsgBoxu a formulářů na datovém listu |
| Poloha MsgBoxu a formulářů na datovém listu: | |
Pro určení vzájemné polohy buněk a objektů Shapes (obrázky, automatické tvary, grafy atd.) spolehlivě slouží vlastnosti Top a Left, které mají pro buňky i Shapes stejnou velikost i společný počátek v levém horním rohu datového listu. Pro jiné objekty, mezi něž se řadí UserForm a MsgBox, však platí jiná souřadnicová soustava s počátkem v levém horním rohu okna aplikace Excel (zpravidla v levém horním rohu celé obrazovky). Pro oblast datového listu navíc lze uplatnit práci s lupou, která mění měřítko souřadnicového systému pro datový list a která se oblasti záhlaví aplikace netýká. Jde tedy opravdu o dva odlišné souřadnicové systémy. Jako evergreen se mi opakovaně vrací potřeba umístit buď MsgBox nebo UserForm do místa, vztaženého k poloze konkrétní buňky. Nikde jsem však nenašel způsob, jak zjistit, kde leží (v souřadném systému okna aplikace) levý horní roh datového listu. V okamžiku, kdy bych tento údaj znal, bych neměl problém umístit Userform přesně k té buňce, k níž má formulář vztah. Již v klasickém Excelu mne ten problém trápil; změna počtu nástrojových lišt, zobrazení / skrytí řádku vzorců nebo zobrazení / skrytí záhlaví buněk pokazí jakoukoliv snahu po vzájemném sladění polohy buněk s polohou MsgBoxu nebo UserFormu. V E2007 stejně mocně do hry vstoupí zobrazení nebo skrytí ribbonu. Otázka tedy zní: existuje způsob, jak zjistit polohu levého horního rohu datového listu (tj. bodu (0;0) pro levý horní roh buňky A1) v souřadném systému, který používá MsgBox a UserForm? Nechce se mi věřit, že by za třináct let existence VBA na danou otázku neexistovala odpověď. Za prozrazení tohoto tajemství mohu obratem ruky dodat k obecnému použití procedury, které umožní dynamicky definovat polohu objektů MsgBox a UserForm vůči libovolné buňce, případně vůči jakémukoliv objektu Shape na datovém listu.
|