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

#1 27. 2. 2018 12:31:21

mirozm
Člen
Registrace: 9. 1. 2006
Příspěvků: 49

Makro z inej knižnice - VYŘEŠENÝ

Dobrý deň
prosil by som o pomoc , mám dve knižnice v moje makra .
knižnica 1 sa volá : "globalne" a je v nej modul "premenne" a makro "init" slúži na deklarovanie globálnych premenných.

makro init je nasledovné:
REM  *****  BASIC  *****
Global oDialog
Global VisibleDialog as Boolean
Global fak1,mzd1,sab1,dat1,vyr1,obj1,pon1,path1,fak2,mzd2,sab2,dat2,vyr2,obj2,pon2,path2 as string

sub init
path1="/home/firma/Dropbox/"
fak1=path1+"faktúry/"
mzd1=path1+"mzdy/"
sab1=path1+"šablony/"
dat1=path1+"databázy/"
vyr1=path1+"výrobky/"
obj1=path1+"objednávky/"
pon1=path1+"ponuky/"
path2="/home/firma/Dropbox/sro/"
fak2=path2+"faktúry/"
mzd2=path2+"mzdy/"
sab2=path2+"šablony/"
dat2=path2+"databázy/"
vyr2=path2+"výrobky/"
obj2=path2+"objednávky/"
pon2=path2+"ponuky/"
end sub



knižnica 2 sa volá "firma"
v nej je nasledovné makro:

sub test_premennych
dim premenna as object
premenna=loadlibrary.globalne
premenna.premenne.init
adresa = convertToURL(sab1+"test.ods")

    msgbox adresa
    end sub

Predtým som mal modul premenne v tej istej knižnici t.j. firma a makro pracovalo pri zavolaní premenne.init

teraz som ho potreboval dať do zvlášť knižnice no už nepracuje a buď mi vyhodí chybu , alebo nenačíta premennú "sab1"

Vopred ďakujem

Editoval mirozm (27. 2. 2018 15:23:58)


LO 5.1.6  platforma Ubuntu-linux 16.04

Offline

#2 27. 2. 2018 14:25:07

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

Re: Makro z inej knižnice - VYŘEŠENÝ

Tady jde o pochopení skutečnosti, že proměnné Global a Public mohou být čitelné v samostatných sešitech, ale v nich už nemohou být deklarované znovu.
     Pokud tedy máte stejné proměnné v knihovně Moje_Standard nemůžete úspěšně načíst místní deklaraci Global se stejným jménam. Jde ještě o detail. Pokud používáte serverovou instalaci a Vy máte na stroji svou vlastní (pro systém cizí) nemusíte mít povolen přístup do DropBoxu. Doporučuji zkontrolovat přístup pomocí hyperlinku. Konkrétně vytvořte hyperlink na data v DropBoxu. Pokud Vás to pustí, můžete adresovat podle tohoto a deklarovat svoje proměnné jinak.
     Hyperlink převeďte pomocí ConvertFromUrl(obsah hyperlinku). Na to potom postavte svoje volání. Obejdete určitě centrálně deklarované proměnné a bude to chodit. Ovšem pokud je to vše v pořádku, tak Vám postačí přejmout dříve deklarované - jen bez toho abyste daklaroval v samostatném sešitě.


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

Offline

#3 27. 2. 2018 14:37:13

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

Re: Makro z inej knižnice - VYŘEŠENÝ

Ještě mne napadlo, že volání DropBoxu mělo být uděláno lépe. Měla být místo Sub init deklarovaná Public Function init, která by vrátila URL pro stažaní, editaci ap. Takto by to mělo fungovat jak potřebujete. PUBLIC nebo GLOBAL Funkci potom jde volat z lokálních sešitů (Standard) stejně jako z nadřazené knihovny MojeMakraStandard.
     Nápověda popisuje také volání maker za pomoci plné cesty (kvalifikované volání). Tam by mohlo jít o popis cesty k Makru init - nejlépe pomocí CALL. Ovšem přepsat na všude viditelnou funkci je čistější řešení. Pokud ale nejste připojen jako součást systému - a dovoláte se, je možné že půjde o problém neoprávněného přístupu - tolik abyste znal možnosti a nebezpečí.

Editoval neutr (27. 2. 2018 14:44:04)


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

Offline

#4 27. 2. 2018 14:44:37

mirozm
Člen
Registrace: 9. 1. 2006
Příspěvků: 49

Re: Makro z inej knižnice - VYŘEŠENÝ

Ďakujem, knižnice ani súbory nie sú na serveri, sú na lokálnom stroji
kým bolo makro s globálnymi premennými v rovnakej knižnici pracovalo OK

Potreboval som ale modul oddeliť z knižnice v ktorej bol a tak som vytvoril novú knižnicu, kde som daný modul aj s makrom a globálnymi premennými umiestnil.

Knižnice sú v rovnakom kontajnery (moje makrá)

No a teraz neviem, ako zavolať makro a tak isto deklarovať globálne premenné ktoré sú v module v inej knižnici. Resp. zavolať makro z inej knižnice. (ten istý lokálny stroj, zatiaľ žiadne serverové riešenie)

Ďakujem

EDIT: pomohlo by mi napríklad keby som tie cesty do premenných mohol načítať napríklad aj z nejakého text súboru.

Editoval mirozm (27. 2. 2018 15:12:33)


LO 5.1.6  platforma Ubuntu-linux 16.04

Offline

#5 27. 2. 2018 15:29:06

mirozm
Člen
Registrace: 9. 1. 2006
Příspěvků: 49

Re: Makro z inej knižnice - VYŘEŠENÝ

Tak prišiel som na to kde bola chyba ... ale pre ostatných:

1. globálne premenné boli rovnako deklarované 2x v dvoch knižniciach naraz
2. po určení jedinečných globálnych premenných nebola načítaná knižnica s premennými - riešenie :BasicLibraries.LoadLibrary("globalne")

Aj tak by som privítal riešenie z načítaním globálnych premenných z externého text súboru.

Ďakujem


LO 5.1.6  platforma Ubuntu-linux 16.04

Offline

#6 27. 2. 2018 17:45:54

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

Re: Makro z inej knižnice - VYŘEŠENÝ

mirozm napsal(a)

Tak prišiel som na to kde bola chyba ... ale pre ostatných:

1. globálne premenné boli rovnako deklarované 2x v dvoch knižniciach naraz
2. po určení jedinečných globálnych premenných nebola načítaná knižnica s premennými - riešenie :BasicLibraries.LoadLibrary("globalne")

Aj tak by som privítal riešenie z načítaním globálnych premenných z externého text súboru.

ad 1 : Celkem pochopitelné - proměnné byly deklarovány duplicitně, ale vlastní makro nemůže být viditelné pokud není také deklarované jako Global nebo Public. Ale já nemám dobrou zkušenost s makry SUB (subroutine) deklarovanými jako Public, nebo Global.
     Když se strefíte do tohoto názvu tak se stanou celkem nečekané věci a může to být dost zlé. Naproti tomu Public, nebo Global Function lze volat parametrem a ten nemůže být současně deklarovaný stejně jako Funkce. Ale volání lze využívat kdekoliv. Příklad takové Funkce :

Public Function init(byVal sVar as string)
Dim fak1,mzd1,sab1,dat1,vyr1,obj1,pon1,path1,fak2,mzd2,sab2,dat2,vyr2,obj2,pon2,path2 as string
path1="/home/firma/Dropbox/"
Select Case svar
Case fak1
   init = path1 & "faktúry/"
Case mzd1
   init = path1 & "mzdy/"
Case sab1
   init = .......
Case cyz
   init = ....
.........
   ...........
End Select
End Function

ad 2 : BasicLibraries.LoadLibrary("globalne") + název je kvalifikované volání makra - tedy plnou cestou. To je druhé řešení stejného problému podobně jako "veřejně nebo globálně viditelná" funkce.


ad 3 : Načítat z obecného textového dokumentu adresář lze. Existuje na to parsovací makro, které podle prvního výrazu (nejlépe pevný počet znaků od počátku - například 3, nebo 4 ap) načte řádek a ukončí průchod přes řádky.
     Je to maličko složitější, nežli funkcem nebo kvalifikovaně volané makro - ale jde to docela dobře. Výhodou je že nemusí být nic deklarováno - jen potřebný text zapsaný do samostatných řádků, popřípadě do CSV - ale to je méně vhodně i když to je možné.
     CSV, nebo text podobný s CSV použijeme zejména pokud používáme zkratky jako klíče. Volací klíč má za sebou separátor. Za separátorem vlastní výraz. Takto jsou řešeny reporty z IT serverů. Například výpisy z relačních databází. Viděl jsem stovky řádků s klíčem, separátor dvojtečka, a vlastní text dokonce bez uvozovek. Byl to text podobný s CSV. CSV by bylo použitelné pro případ převodu z XML databáze. Problém je, že CSV je náročnější na kódovaný text. Obyčejný text se netestuje na kódovou stránku - předpokládá se systémová sada (Libre Office, Apache Open Office).


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

Offline

Zápatí