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

#1 15. 8. 2025 14:18:01

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Ochrana kódu makra heslem "VYŘEŠENO"

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

Editoval Eddie60 (20. 8. 2025 12:34:22)

Offline

#2 15. 8. 2025 20:07:58

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

Re: Ochrana kódu makra heslem "VYŘEŠENO"

Pokud vím tak makra ze zaheslované knihovny jdou spustit normálně bez hesla. Nedají se jen otevřít pro editaci kódu. Může se stát, že uvnitř zaheslované knihovny je kód hesla - sám jsem udělal hodně takových které po spuštění vyhodí dialog pro heslo. Tak tohle s obejít nedá. Je nutné zaheslovanou knihovnu editovat a heslo odstranit, nebo heslo sdílet s kolegy. Když byste dokázal po zadání hesla knihovnu otevřít tak byste mohl dostat knihovnu bez takového hesla. Mnoho zdejších uživatelů by to dokázalo udělat když sem zadáte kód makra.


PS:
Tedy šlo by vytvořit druhou zaheslovanou knihovnu, která by obsahovala heslo do původní heslované knihovny. V tom byste mohl přidat i více hesel pro různé lidi a uměl byste určité přístupy měnit. Ve složitější variantě by to byla role admina, která by přepisovala přístupy z běžného prostředí - vyskakující dialog ap.
     Tedy původní makro z nezaheslovaného adresáře by zavolalo nově přidaná makra v heslované knihovně a tato by pak otevřela původní zaheslovanou knihovnu.

Editoval neutr (15. 8. 2025 20:16:06)


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 17. 8. 2025 15:32:57

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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.

Offline

#4 17. 8. 2025 18:18:11

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

Re: Ochrana kódu makra heslem "VYŘEŠENO"

Eddie60 napsal(a)

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.


Zítra se na to mrknu. Není to nic složitého. Kolik chcete udělat přístupů? Může to být klidně několik set lidí. Budou se muset přihlásit například číslem zaměstnance a k tomu si budou muset pamatovat heslo - každý bude mít jiné.


Vy budete admin, který se přihlásí a může odemknout knihovnu pro editaci přístupových dat. Já mohu udělat knihovnu která nebude uzamčená a Vy si ji načtete už hotovou. Jenom ji po otestování uzamknete. Heslo ke knihovně musíte přidat do makra ještě před uzamčením. Ale pokud to takto nechcete můžete ji otevírat standardně.


Dokonce mohu vytvořit makro raport pro evidenci přístupů - kdo a kdy, od kolika a do kolika hodin se sešitem pracoval. Jde o list, který je normálně skrytý pod heslem. Vejde se tam mnoho záznamů pro celý rok. Počítejte s problémem když by se sešitem chtělo pracovat více lidí současně. Mělo by to jít, ale to jsem netestoval, takže nevím. Jde o to zda bude sešit někde na serveru jako sdílený, nebo jestli bude mít každý stroj (pracovník) svou instalaci.


     Já Myslím, že jsme už byli v kontaktu, takže pokud se nemýlím můžeme přímo kumunikavat přes Google. Pokud nikoliv pod tímto příspěvkem je email. Myslím, že tušíte opakované ladění. Protože se mohou vyskytnout různé nečekané problémy.

Editoval neutr (17. 8. 2025 18:21:24)


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

#5 18. 8. 2025 09:04:45

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

Re: Ochrana kódu makra heslem "VYŘEŠENO"

Tak jsem chvíli přemýšlel a přišel na maličký problém. Každé makro z uzamčené knihovny spouštíte samostatně:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku()
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami()
    MsgBox "Hotovo.", 64, "Dokončeno"
End Sub
     Potvrďte mi že to spouštíte takto zadáním hesla:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku(heslo)
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami(heslo)
    MsgBox "Hotovo.", 64, "Dokončeno"
End Sub
    To je posloupnost příkazů které něco předělají a skončí. Vy nebo jiný uživatel si následně úpravy prohlédnete. Když by bylo takových, nebo podobných posloupností více (X) k různých druhům úprav tak to zřejmě uděláte přes novou zašifrovanou knihovnu do které dáte všech X variant. Souběh uživatelů je zřejmě málo pravděpodobný, což je sázka do loterie. I Tak je nutné aby vaše řešení obsahovalo ještě 1, nebo 2 řádky takto:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku(heslo)
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami(heslo)
       ThisComponent.Store()
    MsgBox "Hotovo.", 64, "Dokončeno"
       ThisComponent.Close()
End Sub
     Nyní se pustím do té knihovny a bude tam mimo kódu hodně popisu takže si netroufnu odhadnout čas, ale snad budou stačit 2-3 hodiny. Mezi tím bych rád dostal zpětnou vazbu na způsob umístění a práce více lidí současně? Je možné, že skupina uživatelů se bude zajímat jen o některé druhy maker. Například někdo jen přidá data do databáze a jiný ji bude jen kopírovat, ...?


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

#6 18. 8. 2025 09:55:45

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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.

Offline

#7 18. 8. 2025 10:38:33

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

Re: Ochrana kódu makra heslem "VYŘEŠENO"

Zde je makro:

Vytvoření nové zašifrované knihovny


V dialogovém okně NÁSTROJE > MAKRA > SPRÁVCE MAKER > BASIC...> ORGANIZÁTOR > KARTA KNIHOVNY > roletka UMÍSTĚNÍ > vybrat knihovnu pod jménem SEŠITU ve kterém má být knihovna (pozor je tam výběr na nadřazení knihovny) > tlačítko NOVÁ do které zadáte název pro novou knihovnu (nesmí být název "Standard", ani název exitující šifrované knihovny).


Po tomto hned raději zavřete dialog organizátoru. Máte vytvořenou novou knihovnu kterou uvidíte v okně Basicu pod knihovnou Standard. Pokud ji neuvidíte, stala se chyba. Zatím je odemčená.


Otevřete okno module1 z čerstvě vytvořené knihovny. Tam zkopírujete následující makro, uložte. Můžete otestovat volání z knihovny standard a popřípadě přizpůsobit.

   
Dim jmeno, heslo as string

 Sub NazevMakra 'Zvolit takové, aby nemělo souběh s jinými makry zejména v té primární zašifrované knihovně.
 
 Dim Doc As Object
 Dim Sheet As Object
 Dim Cell1, Cell2 As Object
 Doc = ThisComponent
 jmeno = InputBox("Zadej uživatelské jméno")
 heslo = InputBox("Zadej přístupové heslo")
 Sheet = Doc.getSheets().getByName("Role")
 For i = 0 To 100
 Cell1 = Sheet.getCellByPosition( 0 , i )
 Cell2 = Sheet.getCellByPosition( 1 , i )
 IF Cell1.string = jmeno And Cell2.string = heslo Then
 Call SpustitZaheslovaneMakro(heslo)
 Exit sub
 end IF 
 Next i
 MsgBox("Špatné uživatelské jméno, nebo heslo", "Chyba")
End Sub 

Po odzkoušení můžete novou knihovnu uzmknout výše popsaným postupem, jen místo NOVÁ (knihovna), zvolíte HESLO. Po zadání hesla je lepší sešit restartovat (neuložené změny kdysi nefungovaly ale i tak je lepší sešit vypnout a hned znovu spustit. Následně otestujte zda uzamčení funguje. Když v okně IDE poklepete na novou knihovnu musí zobrazit dialog hesla.


Tak to je první fáze. Druhá fáze je vytvoření sešitu ROLE, kde budou uživatelská jména a vedle nich hesla takto:
ID uživatele ve sloupci může být jméno. Lepší jsou pro člověka čísla, ale ta používám ve sloupci B jako hesla. Skutečná jména by tam být neměla aby člověk s nečistými úmysly nemohl snadno navolit jméno kolegy a pak mu stačí testovat jen heslo. Mohou to být i čísla, ale musel by se přepsat kód Cell.string na Cell.value.


sloupecA[[RJRZ], sloupecB[314542]
sloupecA[NDROT], sloupecB[970529]
sloupecA[YXYOK], sloupecB[508395]
sloupecA[HKVHW], sloupecB[398581]
sloupecA[[KMXC], sloupecB[511388]
sloupecA[UUWXU], sloupecB[035779]
sloupecA[[TQGY], sloupecB[866051]
sloupecA[YDYRQ], sloupecB[343888]
sloupecA[JQADY], sloupecB[365604]
sloupecA[LZSNT], sloupecB[456968]
sloupecA[KYCAA], sloupecB[603248]
sloupecA[XBLYJ], sloupecB[755436]
sloupecA[QDJCN], sloupecB[878795]
sloupecA[RBIKC], sloupecB[652612]
sloupecA[FYHAG], sloupecB[942417]


Může to být i obráceně ale vždy by to měly být textové znaky (i když půjde o čísla - předejte na začátek například R12A - například místo RUDA). Sloupec A seřaďte vzestupně (kvůli lepšímu prohledávání zejména u dlouhých seznamů). Do sloupců C a dále můžete přidat skutečné jméno a podobně.


Nakonec si můžete nahrát záznamníkem makro na uzamčení a skrytí listu ROLE. Nesmíte ho zapomenout otevřený a odejít od stroje. Vždy znovu pečlivě zkontrolujte, zda je okno ROLE skryté a ještě také že jsou uzamčené změny. Můžete také uzamknout celou strukturu sešitu a pak nikdo nemůže otevřít ani náhodou skrytý sešit, byť uzamčený.


K tomu to návrhu jem dělal mnoho variant. Například místo InputBoxů 1 dialogové okno kde se místo znaků zobrazovaly tečky jak je u hesel obvyklé. Další varianta uchovávala i přístupovou databázi v makru a ne v sešitě protože dříve se stávalo, že zaheslované listy i skryté listy se po otevření v Excelu zobrazily bez uzamčení a neskryté.


Otestujte a uvidíte zda to takto stačí. Šlo by to jinak na dost různých způsobů.

Editoval neutr (18. 8. 2025 10:44:54)


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

#8 18. 8. 2025 18:12:13

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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.

Offline

#9 18. 8. 2025 19:34:03

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

Re: Ochrana kódu makra heslem "VYŘEŠENO"

Myslím, že chyba spuštění spočívá v příkazu Call SpustitZaheslovaneMakro(Vaše heslo). Stačí pouze SpustitZaheslovaneMakro(Vaše heslo k původní knihovně v uvozovnách). Tedy SpustitZaheslovaneMakro("heslo").

Problém může být v tom, že nové makro načítá heslo z deklarace Dim jmeno, heslo as string a nikoliv heslo které používáte standardně. To Vaše heslo zapište pouze do SpustitZaheslovaneMakro("heslo") aby nedošlo k načtení hesla pro přístup uřivatele. Otestujte a napište.


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

#10 18. 8. 2025 20:10:57

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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

Offline

#11 18. 8. 2025 20:46:47

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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.

Offline

#12 18. 8. 2025 20:51:58

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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

Offline

#13 18. 8. 2025 21:44:49

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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?

Editoval Eddie60 (18. 8. 2025 22:02:59)

Offline

#14 19. 8. 2025 07:25:56

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

Re: Ochrana kódu makra heslem "VYŘEŠENO"

Eddie60 napsal(a)

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?


Ad 1: To jsem nezjistil, ale to možná dělá nahrané zamykání se skrýváním a nebo struktura listu. Když nahrajete něco konkrétního tak se v kódu objeví zakomantovaný ředek REM ......... To REM se musí smazat. Když byste měl o tento postup zájem, udělám k tomu makro.


Ad 2: Ano řešení je zde:

Sub NazevMakra
 Dim Doc As Object
 Dim Sheet As Object
 Dim jmeno, heslo As string
 Dim Ar_jmeno(5), Ar_heslo(5) as variant 'Deklarace počtu položek v databázích array - počítá se od nuly
 Ar_jmeno=array("Petr","Karel","Simona","Tonda","Věra","Karolína")
 Ar_heslo=array("1165","k3589","1289Brno","TonVokurka","123","KarelGott")
 ' v databázi array je spárované jméno a heslo pořadím, příklad jméno Petr má heslo 1165, Věra má heslo 123
 Doc = ThisComponent
 jmeno = InputBox("Zadej uživatelské jméno")
 heslo = InputBox("Zadej přístupové heslo")
 'Sheet = Doc.getSheets().getByName("Role")
 For i = 0 To 5 'iteruje od nuly do 5, celkem 6 výrazů. Pokud by bylo 100 výrazů je to 0 To 99. 
 'Číslo 5 v našem případě musí být totožné s čísly Ar_jmeno(5), Ar_heslo(5)
  IF Ar_jmeno(i) = jmeno And Ar_heslo(i) = heslo Then
  SpustitZaheslovaneMakro("Heslo k původní knihovně")
 MsgBox("Všechny operace byly provedeny", 1 , "Úspěšné zakončení")
 GoTo Hopsahejsa
 end IF 
 Next i
 MsgBox("Špatné uživatelské jméno, nebo heslo", 16 , "Chyba") 
Hopsahejsa:
End Sub

Testoval jsem to a u mne funguje (stejně jako předchozí verze).


Raději bych Vám poslal hotové soubory v balíku ZIP, jsou ale problémy s postnutím přes externí portál. U nás to už nejde mnoho let, "Ulož.to" fungovalo mizerně a nyní už asi nefunguje vůbec. Takže jsem na tyto způsoby zanevřel. Pokud byste chtěl celé vzorové soubory, tak jedině emailem. Dám sem na portál dotaz zda někdo ví o externím úložišti. Já mám Google disk (stejně tak to mohou být osobní úložiště typu BOX aj.), ale dávat tam na neurčito přílohy z tohoto fóra se mi nelíbí, protože za rok už nebudu vědět k čemu jsou určeny. Plnil bych si svůj prostor, který nemusí mít dlouhého trvání - je mi přes sedmndesát :-(


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

#15 19. 8. 2025 12:23:45

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 47

Re: Ochrana kódu makra heslem "VYŘEŠENO"

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.

Offline

Zápatí