Mne to ale presne ako popisuješ funguje.
Situácia A:
Ak niekto otvorí súbor a zadá heslo, čiže pošle požiadavku na otvorenie súboru s plnými právami, čiže na zápis, tak sa skontroluje, či je záznam o tomto súbore v tom TXT zozname súborov otvorených na zápis.
Riešenie 1. situácie A:
Ak nieje záznam v zozname TXT, hneď zapíše jeho meno, názov súboru, čas a dátum do toho kontrolného TXT súboru, kde sú zapísané iba a len udalosti otvorenia súboru heslom - čiže na zápis.
Riešenie 2. situácie A:
Ak je záznam v zozname TXT, zmení príznak súboru na ReadOnly, nič sa do zoznamu TXT nezapíše, a súbor je len na čítanie. Excel napr. pri prípadnom ukladaní zmien v takto otvorenom súbore upozorní na nemožnosť uloženia.
Situácia B:
Ak niekto tento istý súbor otvorí tak, že nezadá žiadne heslo, čiže stlačí Enter na požiadavke na heslo, alebo stlačí to tlačítko "Iba na čítanie" na tej požiadavke na heslo, tak sa nič neurobí. Ani sa nič nikam nezapisuje, a Excel si sám odsleduje, že je súbor ReadOnly.
Perfektne funguje aj odmazanie riadka zo zoznamu súborov na zápis, pri zatváraní súboru otvoreného na zápis.
Prepisuješ si správne tie konštanty 2x "ZoznamSuborov" a "Cesta" ? Ja asi natočím video ako to funguje, pretože si asi fakt nerozumieme. Len teraz mám strašne veľa inej roboty. Skúste pls na to zatiaľ mrknúť aj niekto iný. Ja už fakt nestíham.
Podmienkou je prvotné uloženie všetkých tých súborov "Uložiť ako - Nástroje - Všeobecné možnosti - Heslo na úpravy - OK". A pozor na ten TXT súbor ! Ja som ho pozmenil, a v kóde funguje len opravená verzia! Bez dvojitých Tabulátorov, bez medzier v dátume, bez čiarok na konci riadku. Treba si upraviť v tých svojich súboroch aj toto ukladanie, ak to máš inak riešené ako ja.
Prepracované, doplnené, zmenené, otestované ale bez sieti. Upravil som aj zoznam súborov na zápis.
heslo pre súbor na otvorenie pre zápis je "abc" (bez úvodzoviek)
EIDT: S pripájaním do siete to bude treba zase riešiť, presne podľa toho ako sieť funguje. Je namapovaný disk v systéme ? Namapovaný vo VBA? Zdieľaná zložka na serveri ? Uživateľ pristupuje do zdieľanej zložky/na server pod menom a heslom ? Proste je to rôzne. Viď napr.:
http://stackoverflow.com/questions/27248221/access-shared-network-folder
Okrem hesla, to čo som urobil robí presne to čo chceš. O hesle si sa zmienil teraz prvý krát. A tie MsgBox som tam dal len pre to aby bolo vidieť ako som to myslel, a ktorá časť kódu čo urobí. Celú konštrukciu Case 0,1,2,3 si musíš urobiť podľa toho, čo presne chceš aby v danom prípade macro robilo.
To isté platí pre ostatné MsgBox v kóde. NEMUSÍŠ ich použiť.
Takže tie súbory budú zaheslované ? A rozlíšené to bude, podľa toho, či zadáš 1x heslo (súbor na čítanie) alebo 2x heslo (súbor aj pre zápis) ? Či si chceš obslúžiť nejakým svojim mechanizmom otvorenie na ReadOnly a ReadWrite, napr. cez vyvolanie vytvoreného formulára pre heslo ? Ale súbor bude inak bez hesla.
Človeče, to si tam vážne mal nechať názvy mužstiev. Takže ja som si tam doplnil názvy zbrucha.
- v O18 je chyba, odkazuje na riadok 10
=IF(C10="";"";IF(C10>D10;3;IF(C10=D10;1;0)))
podľa tabuľky zápasov má odkazovať na riadok 11
=IF(C11="";"";IF(C11>D11;3;IF(C11=D11;1;0)))
- Niektoré mužstvá hrajú vždy iba vonku, iné vždy iba dooma. To je ale iba kozmetika.
- Ono ti to zoraďuje správne, lebo berie do úvahy skóre. Pretože so skóre sa počíta vo vzorcoch v stĺpcoch U a V
- Najneprehľadnejší je ten SUMPRODUCT. A s tým ti práve neviem pomôcť. Ak by bolo nejaké vysvetlenie tohto použitia. Snáď to niekto "rozkódoval".
V tom mojom poslednom súbore v konštrukcii Case pre hodnotu 1 nahraď čo tam je týmto:
Case 1 ' Súbor nieje na zozname, treba napísať
If MsgBox("Otvoriť dokument v režime ""Iba na čítanie?""", vbQuestion + vbYesNo, "Iba na čítanie ?") = vbYes Then
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
Else
MsgBox ("Tento Súbor " & SuborExcel & " nieje ešte v zozname.")
'Ak sa zvolí hodnota vbNo (nie na čítanie, ale na zápis), treba urobíť záznam do zoznamu !!!
'Proste sem vlož, to čo si tam mal doteraz pre stav, keď treba zapísať do zoznamu
End If
Ak som to dobre otestoval a dobre ťa pochopil, tak stačí iba toto. Netreba žiadne uchovávanie hodnoty o "dobrovoľnom otvorení Iba na čítanie". Ono totiž ak už má dokument niekto otvorený na zápis, tak je zapísaný aj v zozname. Tento kód sa ťa ale na dobrovoľné otvorenie "Iba na čítanie" pýta iba v prípade že nieje inde otvorený na zápis . Čo je logické.
Napada ma pouzit v globalnej premennej priznak boolean na oznacenie prijimania upozornenia. Globalna premenna ale musi byt definovana v module, a v Exceli mi zial nefunguju tak ako by si clovek predstavoval. Potom vyuzivam moznost uchovania udaju v nejakej zarucene nepouzivanej bunke v zosite. Dnes ked vyjde cas, spravim.
Pridal som nastavenie príznaku "Iba na čítanie", a zakázanie uloženia zmien v prípade "Iba na čítanie". Snáď pomôže.
Mrkni na toto. Je to v procedúre Open. Nastav si cesty v premenných podľa seba. Inak v tom TXT súbore som musel "ošetriť" viacnásobné Tabulátory po sebe, čiarky na konci, prípadný Enter na prázdny riadok na konci, a medzery v dátume. Dorob si časť "Vyhodnot:" v Case konštrukcii.
No ja som to pochopil nasledovne:
- tie súbory niesú u uživateľov lokálne, ale každý uživateľ pristupuje na sieťový súbor. Uložený niekde na firemnom serveri.
- on potrebuje udržovať živý zoznam uživateľov, ktorý majú otvorený niektorý z týchto sieťových súborov na zápis. Tento živý zoznam bude tiež asi na serveri.
- problémov s tým spojených je veľa. Napr. musíš všetky Excel súbory doplniť o makro, ktoré si pri otvorení každého súboru načíta tento zoznam otvorených súborov, a zistí, či už práve otváraný súbor niekto otvorený nemá. Ak nie otvorí ho, a zapíše do zoznamu. ALE, treba ošetriť aj to, že v momente, keď niekto bude "seba" zapisovať do zoznamu, tak nikto iný ani neprečíta ani nezapíše do zoznamu nič. Neviem či takéto "bufferovanie" žiadostí na súbor, môže byť v každom súbore kontrolované a vykonané. Neviem si to predstaviť. Jedine, tak že každý súbor bude čakať na prístup k zoznamu napr. 2 sekundy, potom ukončí procedúru otvárania, lebo zoznam je zaneprázdnený (alebo preťaženie siete...)
- Neviem, či ide vlastne v Exceli pri Open procedúre, nastaviť, že sa otváraný súbor otvorí niekomu aj na zápis (ak nikto na daný súbor nieje v zozname), ale iba na čítanie (ak už na daný súbor je záznam).
Ahoj, práve som to zistil, a idem ti napísať. Chýba tam bodka (tečka) na začiatku riadka, čiže namiesto:
ZmenaRoku.Value = Year(Now())
tam má byť
.ZmenaRoku.Value = Year(Now())
Iba preklep.
- Pri otvorení vloží aktuálny dátum, prepočíta, ale iba ak je min. 2015
- Od roku 2015 sa to odpichuje, kvôli odsadeniu prvého dňa v roku, ktoré musí naväzovať na predošlú poslednú pozíciu posledného dňa.
- Urobil som aj featurku na delenie (negramatické) názvu mesiaca na pravom kraji. Názvy mesiacov číta podľa jazykového nastavenia.
- Zvýrazňuje aktuálny deň aj v kalendári aj v smenách
- Smeny nebolo potrebné nijako meniť, kedže vzhľadom k tabuľke sú nemenné. V tabuľke sa mení pozícia dní v kalendári. Akurát som kvôli zvýrazňovaniu dneška musel zlúčiť všetky bunky smien. Zvýrazňovanie dneška robí Automatické formátovanie
- V Automatickom formátovaní, sú použité definované Názvy, v ktorých je potrebné pre CZ verziu Office zmeniť názvy funkcií (tieto platia pre SK, EN Office)
- Sviatky sú nadefinované v makre ako pole.
- Je tam skrytý list Temp, v ktorom sa ukladajú adresy buniek potrebné pre podmienečné formátovanie, na určenie pozície bunky s nejakým dňom
- Makro je dopodrobna popísané komentármi, ale ak niečo chceš vedieť alebo vysvetliť alebo zmeniť (záleží na voľnom čase), pýtaj sa, hovor.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.