< návrat zpět

MS Excel


Téma: Omezení dat v sešitě rss

Zaslal/a 24.7.2010 20:49

Ahoj,

potřeboval bych poradit. Potřeboval bych vymyslet makro, které by po uplynutí nějaké doby (1 den) vypnulo veškeré vzorce a makra v sešitě. V praxi by to vypadalo tak, že by se se sešitem do uplynutí 1 dne pracovalo jakoby v plné verzi a pak by se celý obsah sešitu bloknul a nebylo by možné s ním dále pracovat. Veškerý obsah by se uzamkl pro vkládání jakýchkoliv dat.
Je možné něco takového udělat?

Děkuji za každou radu.

Martin

Zaslat odpověď >

Strana:  1 2   další »
#001985
Jeza.m
Určitě by to šlo, ale zas jedině makrem, třeba při spuštění zkontrolovat datum a případně veškeré buňky zamknout, což pokud někdo při spuštění makra zakáže, tak vzorce budou normálně fungovat, makra už tedy ne, když budou zakázané. Když by makra byly povoleny, tak by se mohly zamknout buňky, což nezamkne makra, ty by musely obsahovat nějakou datovou podmínku na základě které se buď vykonají nebo hodí třebas hlášku, že zkušební doba demoverze vypršela.

M@citovat
#001993
avatar
Díky za vyčerpávající odpověď.
Nevíš zda na to není už nějaké univerzální makro, které by šlo jen dle potřeby upravit? Hledal jsem po netu, ale zatím marně.
Jinak to, že by to nebloklo makra by nevadilo, převážná část sešitu je jen o vzorcích, takže jde jen vlastně o ty vzorce.
Martincitovat
#001999
Jeza.m
Je-li to hlavně o vzorcích, tak když někdo nepovolí makra (které by mu zamkly list), tak je vysmátej :-).
Univerzální "demo" makro neznám, ale ten nejjednodušší způsob bude asi:
Private Sub Workbook_Open()
Dim exdatum As Date
exdatum = "26.7.2010"

If Date > exdatum Then
Cells.Locked = True
List1.Protect "heslo"
Else
List1.Unprotect "heslo"
End If

End Sub


M@citovat
#002010
avatar
Díky vyzkouším to. Ještě prosím o vysvětlení ke kódu (stále ve VBA tápu).
Když budu chtít sešit někomu poslat, tak budu muset vždy měnit aktuální datum v kódu, nebo je to tak, že se bude sešit blokovat ode dne povolení maker (tedy za 24 hodin po povolení maker)?
Jak nastavit delší dobu do blokace sešitu (třeba 5 dnů)?
Co v tvém návrhu kódu znamená "heslo"? Chápu to dobře, že je to heslo, kterým se zamkne list?
Díky,
Martincitovat
#002011
Jeza.m
'definice proměnné jako datum
Dim exdatum As Date
'nastavení data expirace - než pošleš můžš změnit na datum kdy chceš aby platnost vypršela
exdatum = "26.7.2010"
'pokud aktuální datum je větší než expirační datum tak ...
If Date > exdatum Then
'...zamknout buňky
Cells.Locked = True
'...zamknout list s heslem "heslo" - můžeš nastavit cokoliv
List1.Protect "heslo"
'jinak
Else
'odemkni (toto else a odemčení tam ani nemusí být, ono když to tady necháš a někdo si na pc pusune čas zpět, tak se buňky odemknou, takže já bych to smazal, měl jsem to tam jen pro test.
List1.Unprotect "heslo"
End If
End Sub

Jinak šlo by to řešit i přes registry počítače, kdy při prvním spuštění zapíšeš datum a pak už jen porovnáváš, ale je to zápis do registru bez vědomí uživatele, bohužel to ale dělá spousta programů a pak ty registry nemají vypadat jak vypadaj :-). Ono i tohle zkušenější uživatel obejde smazáním data z registrů.

Teď mě tak napadá, že zápis do registrů jsem zatím dělal jen přes VB, ale ve VBA jsem to ještě nezkoušel, no ale asi by to jít mělo :-)

M@citovat
#002014
avatar
Díky, už to chápu.
Ale napadla mě jěště jiná věc. Jak to vyřešit, když budu chtít ono demo dát na web, kde si ho libovolně zákazník stáhne (neznámo kdy ho stáhne) Jde to nějak ošetřit? Že by blokace sešitu byla nastavena na den od otevření sešitu, nikoliv na konkrétní datum.
Možná bych viděl problém v tom, že když někomu pošlu ono demo, které bude funkční 1 den od odeslání a zákazník ho třeba otevře po delší době, to už otevře bloknutý sešit (teda po povolení maker). Chápu to tak dobře?
M.citovat
#002015
Začátečník
Sice nevidím důvod odemykat list se vzorci, ale budiž.
Pokud by byly uzamčeny buňky se vzorci a volné jen ty, do kterých může uživatel zapisovat data, pak lze vše vyřešit zápisem datumu při otevření sešitu do určité "skryté" buňky na listu a ten pak porovnávat.

Poté zamknout všechny buňky v listu (Cells.Locked=True) a automaticky ukládat sešit při uzavření.citovat
#002016
avatar
Přesně tak bych to asi potřeboval udělat. Bohužel určitě takto nezvládnu udělat makro.
Mohu požádat o ukázku kódu? Děkuji moc M.citovat
#002017
Začátečník
Tak např. skrýt poslední sloupec v sešitu (což je 256-tý) a do druhého řádku vložit počet dní pro testování.
Při prvním průchodu nebude datum obsahovat nic.
Tedy buňka IV1 bude prázdná a buňka IV2 bude obsahovat počet dní. Sloupec IV skrýt, uzamknout sešit heslem a vložit makro.


If Cells(1, 256) = Empty Then
List1.Unprotect "heslo" ' odemkutí listu heslem "heslo" k provedení změn
Cells(1, 256) = Date ' vložení aktuálního data
List1.Protect "heslo" ' uzamčení sešitu heslem "heslo"
End If

If Date > Cells(1, 256) + Cells(2,256) Then
List1.Unprotect "heslo" '...odemknout list s heslem "heslo" - můžeš nastavit cokoliv
Cells.Locked = True '...zamknout buňky
List1.Protect "heslo" '...zamknout list s heslem "heslo" - můžeš nastavit cokoliv
ActiveWorkbook.Save ' uložení sešitu se změnami
End If


Ovšem pokud si někdo stáhne sešit znovu zase mu bude fungovat určitý počet dní.
Samozřejmostí je i zaheslování projektu! Jinak si to každý otevře a heslo ví.citovat
#002019
Jeza.m
Tak trochu nevýhodou zápisu data přímo v souboru je, že uživatel soubor se zapsaným datem nemusí uložit :-), leda by uložení se zapsaným datem bylo provedeno makrem po spuštění.

Jak jsem psal o zápisu do registru, tak funguje:
ZápisSaveSetting "Aplikace", "Demo", "Datum",date+1
Načteníexdatum = GetSetting("Aplikace", "Demo", "Datum", date +1)
M@citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje