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

#1 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 19. 8. 2025 12:23:45

O makro zájem mám. Nemůžu přijít na to, proč někdy se mi podaří spustit makro přes tlačítko přímo v zaheslované knihovně bez jejího otevření heslem. ZIP buď na email nebo přes https://www.uschovna.cz/poslat-zasilku.
Podívejte se do své e-mailové schránky. Díky.
P.S.
REM na začátku makra jsem vymazal, nepomohlo.

#2 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 21:44:49

1) Pokud knihovnu s makrem pro spuštění hlavního makra z zaheslované knihovny zahesluji, makro nefunguje.
2) Šlo by makro upravit tak, aby předvyplnil uživatel např. "Ruda" a heslo "5784" bez listu role?

#3 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 20:51:58

Chybu jsem našel a odstranil. Stačilo prohodit tyto 2 řádky:
Exit sub
end IF

#4 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 20:46:47

Po uzavření LibreOfice a následnému otevření sešitu se po spuštění makra objevuje "BASIC - chyba při běhu.
Podprocedura nebo funkční procedura není definována."; řádek Call SjednotZahlaviADupliku("moje heslo") = heslo k otevření knihovny s hlavním makrem.

#5 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 20:10:57

Díky za upřesnění. Chyba byla u mě. Vše nyní funguje.
Děkuji za pomoc.

#6 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 18:12:13

Dle návodu mám vytvořenu novou knihovnu LibraryADM se zaslaným makrem = Prihlaseni(), zatím bez hesla.
Makro spouštím ze základního modulu. Přihlášení funguje, ale háže mi to chybu "BASIC - chyba při běhu.
Vlastnost nebo metoda nenalezena: SjednotZahlaviADupliku." na řádku Call SpustitZaheslovaneMakro(heslo).
Volaná procedura je:
LibraryEK.Module1.SjednotZahlaviADupliku()
Zkoušel jsem i LibraryEK.Module1.SpustitZaheslovaneMakro(heslo), přejmenovat hlavní makro, ...
Chyba je stále stejná. Nemůže být problém v tom, že heslo k LibraryEK je jiné?
Děkuji.

#7 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 09:55:45

Není potřena ztrácet moc času. Makro můžu upravit na:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku(heslo)
    MsgBox "Hotovo.", 64, "Dokončeno"
End Sub
Úplně mi postačí, pokud bude jedno další heslo pro uživatele, které umožní spustit celé makro a uživatel se nedostane ke kódu. Uživatel si sešit otevře lokálně na svém pc. Sešit je zálohován. Jde jen o ochranu kódu. Děkuji.

#8 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 17. 8. 2025 15:32:57

Dobrý den,
děkuji za odpověď. Líbí se mi "PS:", protože heslo k otevření kódu makra sdílet nechci.
Zaheslovanou knihovnu LibraryEK s makry spouštím pomocí nakra v knihovně Standard.Module1:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku()
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami()
    MsgBox "Hotovo.", 64, "Dokončeno"
End Sub

Mohu vytvořit zaheslovanou knihovnu, např. "psw".
Nevím, jak vytvořit makro s heslem, které by otevřelo uzamčenou knihovnu LibraryEK.

#9 Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 15. 8. 2025 14:18:01

Eddie60
Odpovědí: 14

Dobrý den,
obracím se na zkušenější uživatele se žádostí o pomoc.
Mám v chráněné knihovně poměrně složité makro.
Makro spouštím ze standardního modulu, odkud volám makro v zaheslované knihovně (tu jsem měl uloženu v souboru, zkoušel jsem ji i v Moje makra). Vše doma funguje. Sešit ale budou používat kolegové a to je kámen úrazu.
Jak to udělat, aby makro fungovalo bez znalosti hesla?

Děkuji.
Eddie

#10 Re: Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 1. 4. 2023 12:13:04

Dobrý den,

rád bych Vám poděkoval za řešení tohoto problému, a zejména za ochotu a trpělivost při procesu ladění méně zkušenému uživateli LibreOffice, který se snaží zefektivnit nejen svoji práci, ale i svých kolegů/kolegyň.
     
Stále se mi potvrzuje, že člověk se učí celý život, pokud si nechce nechat ujet vlak.
     
Ještě jednou vřelé díky za profesionální přístup. :) =) :)

#12 Re: Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 7. 2. 2023 10:56:28

Nerozumíme si. Uváděná data jsou pouze ukázková. "Item" je druh materiálu. V našem systému máme cca 5 000 druhů materiálu, 2 hlavní dodavatele a různé zákazníky. Neřešte, prosím, "anglické i české výrazy". Dnes komunikujeme s některými zahraničnímu firmami v češtině a naopak v angličtině se zahraničními.
1-2 týdně stahuji aktuální informace z webu na základě poptávek. Je nás více a v celkovém součtu ztrácíme zbytečně čas. Proto jsem uvažoval o makru.
Ve zdrojovém souboru se nemění hlavička, ale obsah dat podle požadavku. Položka "Item 1" je sice jedinečná, ale to neznamená, že ve zdojových datech je vždy. Použití funkce IFS je v tomto případě nepoužitelné.
Napadlo mě toto řešení na základě ad 3):
Udělám si šablonu, kde budou 2 řádky s čísly pro seřazení sloupců (v obou bude stejný počet čísel, jen pořadí jiné, aby sloupce, kde potřebuji upravit formát dat byly v matici) a do listu "Dodavatel" zkopíruji vstupní data a vložím 2 řádky s čísly. Zbytek by snad šlo řešit makrem v listu "Dodavatel":
1) seřadit sloupce podle řádku č. 1
2) zjistit počet neprázdných buděk v A4:A5000 (= např. "pocet_PN")
3) opravit formát buněk v matici B4:K"pocet_PN" na formát "číslo", záměna "," za ".", např. nyní 2,500 (výsledek 2500), formát buňky je text
4) opravit čísla v matici M4:V"pocet_PN" - záměna tečky za čárku, např. cena = 0.08536 (výsledek 0,08536)
5) vymazat řádek č. 1
6) seřadit sloupce podle řádku č. 1 (původně č. 2)
Dle tohoto postupu si můžu nahrát jednotlivá makra a pak je spojit. To ale nebude ideální.
Pomůžete mi, prosím?  Opravdu nám to ušetří to čas.
Pokud ano, upravím testovací data.
Děkuji.

#13 Re: Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 5. 2. 2023 11:00:32

Díky za Vaši reakci. Nechci Vás zbytečně zdržovat, ale potřebuji pomoc.
1) Nepotřebuji "opravit, vytáhnout a porovnat s hodnotami jiného zdroje."
Potřebuji do prázdného listu zkopírovat potřebné sloupce ze souboru "Dodavatel.xls".
Prázdné sloupce v souboru jsou data, která nepotřebuji, proto jsem je vymazal. Celkem je tam 176 sloupců.
Nejedná se o "nesprávný import z nějakého CSV". Data stahujeme z webu dodavatele.
Položky (=druh zboží) ve sloupci A "Item 1 - 10" jsou jedinečné.
Buňky "Quantity 1" až "Quantity 10" jsou množstevní limity s odpovídající cenou "Price 1" až "Price 10".
Ostatní sloupce mají víceméně informativní charakter.
Výsledkem by mělo být pouze 29 sloupců - viz soubor Test.ods
https://drive.google.com/file/d/127A5WW … sp=sharing
V listu "Kalkulace" jsou chyby, které se snažím odstranit úpravou vstupních dat.
   
2) K "Přes to je také znát, že vzorce asi nepoužíváte tak efektivně, jak byste mohl."
Možná máte pravdu. Třeba mi poradíte, jak to zrychlit. Používám tento vzorec (příklad) pro načtení dat do listu Dodavatel1:
=VLOOKUP($A2;'file:///C:/Users/Eddie/Downloads/SynologyDrive/Calc/Dodavatel1.ods'#$'Sheet 1'.$E$2:$EA$5000;MATCH("Quantity 1";'file:///C:/Users/Eddie/Downloads/SynologyDrive/Calc/Dodavatel1.ods'#$'Sheet 1'.$E$1:$EA$1;0);0) - soubor *.xls ukládám do *.ods (soubor je výrazně menší, formát *.xls mi dělal problémy)
a pak v dalším listu upravuji zobrazení čísla (Quantity):
=VALUE(SUBSTITUTE(VLOOKUP($A2;$Dodavatel1.$E$2:$Dodavatel1.$EA$5000;MATCH("Quantity 1";$Dodavatel1.$E$1:$Dodavatel1.$EA$1;0);0);",";""))
   
Předpokládál jsem, že jednorázové načtení dat makrem výrazně ušetří čas. Mění se sortiment zboží, množství a ceny.
Nejsem si jist, že cca 150 tisíc vzorců (29 sloupců x 5 000 řádků) na jednom listu bude rychlejší než makro.
 
3) Napadlo mě zjednodušení bodu 1. a 2. zadání.
Do aktuálního ceníku zkopíruji všechny data, vložím prázdný řádek pod Hlavičku tabulky a z pomocného listu do tohoto prázdného řádku zkopíruji řádek, kde v bude parametr např. "AAA" u sloupců, které se smažou makrem (nebo naopak, které zůstanou a ostatní se smazali). Nevím, co je jednodužší.

#14 Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 5. 2. 2023 07:46:27

Eddie60
Odpovědí: 7

Dobrý den,
zkouším dohledávat data pomocí funkce VLOOKUP v kombinaci s MATCH, SUBSTITUTE, VALUE ze 2 externích souborů.
Trvá to dlouho a při přepnutí do daného listu opět čekám, než se data zobrazí.
Vstupní data mají až 10 tisíc řádků a až 50 sloupců. Ne všechny sloupce potřebuji.
Makrem by to mělo být rychlejší. Bohužel s ním nemám velké zkušenosti.
   
Zadání:
1. po spuštění makra dotaz na externí soubor (formátu XLS) a případně výběr listu (může jich být více).
2. do aktuálního listu import sloupců dle jejich názvu "PN","Text AAA", "hmotnost", "Popis AAA", "Popis BBB", "Unit Quantity","Minimum Order Quantity", "UOM", "Box Quantity",
"Quantity 1", "Price 1" až "Quantity 10" a "Price 10". Ne všechny buňky musí obsahovat data.
3. Oprava formátu buněk ve sloupcích "*Quantity*" na formát "číslo", záměna "," za ".", např. "Box Quantity" = 2,500 (správně 2500), formát buňky je text
4. Oprava formátu čísel ve sloupcích "*Price*" - záměna tečky za čárku, např. cena = 0.08536 (správně 0,08536)
5. setřídění dat dle "PN" (sloupec A)
Výsledkem by měl být seznam bez prázdných sloupců.
   
Upravený zdrojový sešit je zde.
https://docs.google.com/spreadsheets/d/ … ue&sd=true
Děkuji.

#15 Re: Calc » Vnořené funkce - ošetření chyby 502 - "VYŘEŠENO" » 4. 2. 2023 18:52:07

Děkuji za rychlou odpověď.
Fungují obě varianty. Super.
Díky.

#16 Calc » Vnořené funkce - ošetření chyby 502 - "VYŘEŠENO" » 4. 2. 2023 17:54:20

Eddie60
Odpovědí: 2

Dobrý den,
rád bych vás požádal o pomoc.
 
Ve zdrojových datech jsou špatné formáty dat, např.:
množství = 2,500 (správně 2500), formát buňky je text
cena = 0.08536 (správně 0,08536), formát buňky je číslo
 
V minulosti jsem nejdříve zdrojová data upravil a následně s nimi pracoval.
V původních datech je až 5 tisíc řádků a cca 50 sloupců. Ne všechny sloupce potřebuji.
Celý proces je potřeba urychlit pomocí vzorců.
 
Běžně k vyhledávání používám tento vzorec:
=VLOOKUP($A2;$list3.$E$2:$list3.$EA$5000;MATCH("Quantity 3";$list3.$E$1:$list3.$EA$1;0);0)
zobrazí se hodnota "2,500", kterou je nutno upravit na správný formát (pro další výpočty):
=VALUE(SUBSTITUTE(VLOOKUP($A2;$list3.$E$2:$list3.$EA$5000;MATCH("Quantity 3";$list3.$E$1:$list3.$EA$1;0);0);",";"")
Vzorec funguje, ale když je buňka prádná, zobrazí se chyba 502.
   
Potřebuji, aby výsledek byl v tomto případě "9999999" (pro další podmínky ve vzorcích), což se mi nedaří. Někde dělám chybu.
=IF((ERROR.TYPE(502);9999999;VALUE(SUBSTITUTE(VLOOKUP($A2;$list3.$E$2:$list3.$EA$5000;MATCH("Quantity 3";$list3.$E$1:$list3.$EA$1;0);0);",";""))).
Vždy se mi zobrazí výsledek "# N/A", i když buňka není prázdná.
Děkuji.

#17 Re: Calc » VLOOKUP - změna oblasti pro vyhledávání - VYŘEŠENO » 1. 2. 2023 22:27:10

Super, až na malou chybičku ve vzorci, kterou jsem opravil (místo "," má být ";"), vše funguje.
=VLOOKUP($A2;$Data_2.$A$2:$Data_2.$C$13;match("jmeno sloupce"; $Data_2.$A$1:$Data_2.$C$1;0);0)
Děkuji za pomoc.

#18 Calc » VLOOKUP - změna oblasti pro vyhledávání - VYŘEŠENO » 1. 2. 2023 15:55:33

Eddie60
Odpovědí: 3

Dobrý den,
po delší době se na vás obracím se žádostí o pomoc.
   
Velmi často používám fukci VLOOKUP s jedním (někdy i více parametry) pro vyhledávání.
Vše funguje bez problémů do okamžiku, kdy do vyhledávací oblastí přidám/odstraním sloupec.
Tím se změní hodnota Indexu a zobrazí se jiné údaje (viz odkaz; listy "Data_2" a "list2").
Je to velmi zjednodušený příklad. Používám až 10 listů (v některých až 50 sloupců).
   
https://drive.google.com/file/d/15YgAfZ … share_link
   
Lze tuto situaci nějak ošetřit?
   
Zaregistroval jsem, že u vzorců s odkazem na jiný list musím používat absolutní hodnotu i u názvu listu
(např. "=VLOOKUP($A2;$Data_2.$A$2:$Data_2.$C$13;3;0)"), aby nebyl problém při kopírování listu s vložením na začátek/konec.
Není to chyba? Názvy listů jsou snad jedinečné.
Děkuji.

#19 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 3. 4. 2022 13:55:19

Ano, chtěl bych, aby v hlavičce bylo číslo max. 12.
První červený řádek s hlavičkou jsem doplnil ručně, aby byl vidět výsledek makra. 
Jinak makro funguje perfektně.
Děkuji.

#20 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 3. 4. 2022 12:39:23

Do souboru jsem doplnil hlavičku (červeně), která vznikne po ukončení makra na plných datech.
https://drive.google.com/file/d/1DMJwL7 … sp=sharing
To jsem měl na mysli.

#21 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 3. 4. 2022 09:52:48

Makro funguje rychle (cca 3,5 min) a dobře až na hlavičku, kde je 377x "Počet_x" a "Cena_x" (u cca 80 tis. řádků). Dá se to jednoduše ošetřit?
Pokud ne, tak to tak necháme. Hlavička se dá rychle upravit.
Děkuji.

#22 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 2. 4. 2022 19:31:04

Nejdříve na vysvětlenou. Jednotka a měna má pro nás informativní charakter. Pro jeden materiál jsou vždy stejné pro daný ceník.
Na základě Vaší odpovědi jsem upravil vstupní tabulku a pokusil se také upravit i makro (viz Cenik_sloupce_zadání_2.ods).
https://drive.google.com/file/d/1-U7xLS … sp=sharing
Snažím se pochopit, jak makro funguje a taky jsem nechtěl, aby jste ztrácel další čas.


Makro v tomto případě funguje bez problémů, počet opakování materiálu je max 12 a v "List2" je počet párů sloupců "Počet" a "Cena" taky 12.


1) Problém nastává u celého objemu dat u cca 80 tis. řádků (počet různých 8965, max opakování 6), kdy v hlavičce je 377 párů sloupců. 377 je hodnota "opak".
Počet opakování jednoho materiálu může být max. 12.
Pozitivní je, že konverze ceníku do řádků nyní proběhne celá v rozmezí 3-3,5 min, což je super.

2) V listu "vystup_Cíl" jsem přesunul sloupce "Jedn." a "Měna", aby se kopírovali pouze 1x.
Nevím, jak upravit makro.

#23 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 1. 4. 2022 19:43:30

Práva jsem opravil
https://drive.google.com/file/d/1d3rKPu … sp=sharing


Na základě Vaší odpovědi mě napadlo toto řešení:
Sloupce Jednotka a Měna jsou pro 1 položku vždy stejné, mohli by se zkopírovat pouze jednou za sloupec "Materiál".  Pak by smyčka (opakování) byla pouze na Množství a Cenu.
Bude to takto fungovat?

Pokud ne, rozdělím soubor na 2 části a pak data spojím.
Jedná se o největší počet řádků (do 40 tisíc).
Zpravidla pro tento typ převodu mám menší počet řádků.
Snažím se najít řešení, které bude fungovat delší dobu.
Formát dat není rozhodující, pokud to zrychlí makro. Formát dat se dá velice rychle dodělat.

#24 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 1. 4. 2022 16:58:40

Změnil jsem hlavičku dle doporučení na:
"Sub hlavicka(ByVal opak as long)
print opak"

Vyskočilo hlášení s číslem 377 a následně stejná chyba (chyba_2a.jpg)
https://drive.google.com/file/d/1d3rKPu … sp=sharing


Vzhledem k tomu, že do originálního souboru "Cenik_sloupce_úprava3.ods" jsem jsem nakopíroval do listu "vstup" pouze nová data od ř. 2, opravil hlavičku makra dle doporučení, výsledek byl tento:
20 tis. řádků - chyba 2a;
15 tis. řádků - makro proběhne;
jsem začal hledat jinde a napadlo mě zkontrolovat verzi SW.
Měl jsem LibreOffice v. 7.3.0.3 (progresivní) a tak jsem ji nahradil v. 7.2.6.2 (stabilní)
Makro u 20 tis. řádků nyní proběhne, ale u 38 tis. řádků se objeví stejná chyba.
Nechápu.

#25 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 31. 3. 2022 17:41:20

Otestoval Ceník_úprava3. Chyba přetečení se neobjevuje, ale objevuje se opět chyba:
"BASIC - chyba při běhu.
Vyskytla se výjimka
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: ." - viz
https://drive.google.com/file/d/1A-vP1Q … sp=sharing
Pokud nechám v souboru cca 1000 řádků, konverze proběhne. U 1500 řádků již nikoli.


Zrychlení makra není nutné. I kdybych to dělal 1x denně, ušetří mi to spoustu času.

Zápatí

Používáme FluxBB