< návrat zpět

MS Excel


Téma: Vyhľadávanie a import z txt cez VBA rss

Zaslal/a 31.12.2014 16:31

Zdravím,
Dostal som úlohu, z ktorou sa trápim už nejakú hodinu...
Podnik má firemnú sieť, na ktorej majú určitý počet MS Excel súborov, ku ktorým pristupuje značný počet uživateľov cca 100 a vždy 1súbor môže mať otvorený na zápis len 1 uživateľ (logicky). Teraz chcú vedieť, kto konktrétne. Vyriešil som to ukladaním hodnôt (názov súbora, kto a kedy) cez txt súbor (viď príloha), kde sa mi nová hodnota ukladá vždy na koniec. Problém je, že opätovne načítavanie nemôžem riešiť cez list zošita, ale len cez premenné VBA. Základ je, že potrebujem nájsť hodnoty po riadkoch, porovnať posledný zápis z názvom súbora (práve otvoreným) a pri zhode zobraziť údaje z riadka.
Dim sValue As String
Dim myFile As String
Dim intFNumber As Integer
Dim lRow As Long
Dim lColumn As Long
Dim vData As Variant
Dim intCount As Integer
myFile = "O:\DIR\OTVOR_Doch.txt"
intFNumber = FreeFile
On Error Resume Next
Open myFile For Input As #intFNumber
If Err.Number <> 0 Then
MsgBox "Nie je nič!", vbCritical, "Error!"
Exit Sub
End If
On Error GoTo 0
'First row for data
lRow = 1
'Loop until the end of file
Do While Not EOF(intFNumber)
'Read data from file
Line Input #intFNumber, sValue
vData = Split(sValue, vbTab)
Loop
Close #intFNumber

Zatiaľ mám toto. Lenže po čase som zistil, že údajov v txt súbore je tak veľa že hľadanie je značne problematické. Znalý programovania, máte z tým niekto skúsenosti viete poradiť ako na to? Aspoň "nakopnutie" by pomohlo...Vďaka!

Příloha: txt22929_otvor_doch.txt (1kB, staženo 42x)
Zaslat odpověď >

Strana:  « předchozí  1 2 3   další »
#022957
elninoslov
Pridal som nastavenie príznaku "Iba na čítanie", a zakázanie uloženia zmien v prípade "Iba na čítanie". Snáď pomôže.
Příloha: rar22957_excelpristupksuborom2.rar (13kB, staženo 42x)
citovat
#022976
avatar
Na dnešných testoch bolo všetko Ok. Lenže vznikla nová požiadavka, aby upozornenie (kto a kedy naposledy otvoril súbor pre zápis) chodilo len tým uživateľom, ktorí otvárajú súbory na čítanie "nedobrovoľne", t.j. vynechať tých, ktorí použijú tlačidlo "IBA na čítanie" pri otváraní.
Je možné nejak cez VBA vôbec "podchytiť" túto procedúru (rozlíšiť to)?citovat
#022978
elninoslov
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.citovat
#022983
elninoslov
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é.citovat
#022991
avatar
elninoslov:
Nie toto som mal na mysly. Skúsim vysvetliť takto, požiadavky zhrniem do týhto variantov (všetko riešené na firemnej sieti):
1, Pri otváraní excel súborov na "zápis" (pod heslom), zapíšeš do zoznamu, nič nezobrazíš (žiadne upozornenie a tak).
2, Ak sa pokusiš OTV. súbor na zápis a je otvorený inde na sieti, automaticky Ti súbor OTV. na čítanie-prezeranie (toto som nazval "nedobrovoľne" otv. na čítanie). Tu je požiadavka zobraziť (kto a kedy naposledy otvoril súbor pre zápis).
3, Nakoniec "dobrovolne" OTV. na čítanie pri ponuke zadávania hesla pri otvorení. Tu nezobrazovať bič, nezapisovať nič...
Skúšam už veľa kombinácií a zatiaľ horeuvedenému nevyhovuje nič... 7citovat
#022998
elninoslov
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.citovat
#023012
elninoslov
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
Příloha: rar23012_excelpristupksuborom3.rar (18kB, staženo 37x)
citovat
#023028
avatar
elninoslov:
Na začiatok,ešte raz vďaka za pomoc! Vidím, že si si dal robotu a celé si to prekopal, ale nefunguje to tak akoby malo.
Z mapovaním diskov ani zo sieťou problém nie je (sú voľne prístupné).
Problém je to čo som písal v predchádzajúcom príspevku v bode 2. Už som skúšal niekoľko možnosti cez funkciu IsFileOpen, rozmýšlal som podchytiť zadávania hesla (ak zadáš heslo, tak urob toto),ale zatiaľ nič...
Potrebujem podchytiť stav kedy pri pokuse o OTV. súboru na zápis (po sieti), ak je už niekde otvorený, zobrazí upozornenie kto to má otvorené. To "nedobrovoľné" otv. na čítanie robí systém (excel) automaticky! Neviem či sme sa pochopili...citovat
#023032
elninoslov
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.citovat
#023036
avatar
elninoslov (pre ostatných):
Vyhľadávanie v txt a zobrazovanie funguje správne (je jedno či použijem tvoju alebo moju verziu). Aj v konštantách nie je problém (nie som začiatočník).
Riešenie 1, situácie A - funguje správne.
Situácia B je tiež v poriadku (akurát nemusím sledovať, že je ReadOnly).
Riešenie 2, situácie A musím Ťa poopraviť. Pri otv.na zápis musí vždy zapísať do zoznamu. Ale kontroluje zoznam (a zobrazí upozornenie) len vtedy, keď je súbor otv. po sieti "nedobrovolne" na čítanie (t.j. vtedy keď je niekde už otv. na zápis po sieti). A vtedy sa excel nepýta na nič (bez môjho zásahu - žiadne heslo a pod.) a automaticky otv. na ReadOnly. A toto je jediný problém.
V stredu som nasadil vo firme verziu (na 10 súborov), pri ktorej zobrazí upozornenie (čo, kto, kedy naposledy) vždy keď je súbor ReadOnly. Upozornenie zobrazuje vpravo dole (formulár) a podľa prvých ohlasov to nie je až taký problém (ale stále je to otravné).
Elninoslov nechcel som Ťa zaťažovať, ale ešte raz vrelá vďaka - to tvoje vyhľadávanie funguje v poriadku!citovat

Strana:  « předchozí  1 2 3   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