Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 18. 12. 2016 14:39:10

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Volání maker z jiných knihoven.

Popis problému :
     Problém vzniká při prvním volání makra (lokální knihovna A) ovládacím prvkem z jiné knihovny (lokální knihovny B). Při opakovaném pokusu už to většinou v LO chodí, ale v AOO to nejde ani po opakovaném volání. Podobně se to chová při přímém volání z knihovny (spustit makro z IDE). Volání z knihovny A do knihovny B projde správně v LO i AOO.
     Následné spuštění ovládacím prvkem fungovalo jen v LO, ale nikoliv v AOO. Je to poměrně záludný problém. Když totiž předem dojde k načtení knihoven - chyba se většinou neobjeví (netestoval jsem všechny varianty spuštění, verzí, OS a podobně). Ovšem ladit takto neočekávaný problém je samá radost.


     Já jsem řešil problém uživatele "marrtt". Předpokládal jsem jiný původ chyby ale po zaslání vzoru jsem pochopil, že to není tak snadné. Důvodem nebyly žádné duplicitní názvy, nebo přetížené moduly.
     Otestoval jsem nápovědou doporučovaný postup kvalifikovaného volání Knihovna.Modul.Makro() - a zase nic. Nefungovalo ani deklarování volané rutiny na Global (Logicky to nepůjde dokud nebude modul knihovny načten).


     Jako řešení jsem provedl úplné validní volání knihovny (B) která ještě není načtena při spuštění makra v knihovně A. Příklad volání podle nápovědy :

Proceduru nebo funkci je také možné volat plně kvalifikovaným názvem.
Knihovna.Modul.Makro()
Například chcete zavolat makro Autotext z knihovny Gimmicks:
Gimmicks.AutoText.Main() 

Nápověda by se měla upravit asi takto protože uvedené volání není plně kvalifikované.

Úprava by měla vypadat pro lokální knihovnu Basic asi takto :
ThisComponent.BasicLibraries.LoadLibrary("Knihovna","Modul")
Call Makro()

      Otestujte prosím na různých OS takto : - Vytvořete v lokálním dokumentu makro - například Main() knihovna Standard, Modul1 a v něm odkažte na jinou knihovnu - například Library1, modul1, MyMakro() které bude obsahovat například Print "správně" - nebo MsgBox ap.
      Vytvořte ovládáací prvek (př tlačítko) a z něj slouštějte makro Main(). Tedy hned po otevření sešitu. Problém může být příčinou různých selhání hlavně u rozšíření. Domnívám se že došlo ke změně někdy v průběhu oprav chyb, nebo přidání vlastností verze 5.1-2.
      Nadávno se totiž změnila možnost volat makra pomocí hyperlinku. To původně chodilo, ale bylo to zrušeno (zřejmě cíleně). Nyní se to objevilo znovu - ale s tím asi také vzniká popisovaná chyba volání maker.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

Zápatí