< 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 38x)
Jméno
Kontrola
Text
  b i u s img code url hr   1 2 3 4 5 6 7 8 9 10

Strana:  1 2 3   další »
#022930
Hav-Ran
Použitim tvoreného txt súboru so zapísaním mena užívateľa, mena PC datumu a času - viď príloha, by mohlo byť riešením. Ide o zapísanie do lokálneho PC, pri sieti treba zmeniť cesty a zabezpečiť ochranu pre vymazaním txt-súboru či jeho editovanie

PF2015 všetkým
Příloha: zip22930_f.zip (11kB, staženo 41x)
citovat
#022933
avatar
Hav-Ran:
Toto zapisovanie mám už vyriešené, mne ide o to vyhľadávanie...

Inak všetkým PF 2015citovat
#022936
Hav-Ran

Cedrom napsal/a:

Hav-Ran:Toto zapisovanie mám už vyriešené, mne ide o to vyhľadávanie...Inak všetkým PF 2015

Tak to treba vyriešiť, aby sa užívateľ NEPRIPISOVAL na koniec txt-súboru ale sa vždy vytvoril vždy NOVÝ txt súbor s jediným zápisom, prepísal by existujúci. Potom tento jedinečný txt - súbor stačí načítať do jedinej bunkycitovat
icon #022939
avatar
Teraz chcú vedieť, kto konktrétne.
Na to, aby sa dalo zistiť, kto konkrétne má súbor otvorený pre zápis, pmn úplne stačí, aby si užívatelia v obecnom nastavení (File -> Options -> General) uviedli v poslednom (spodnom) dialógovom okne svoje meno. Ale chápem, že i toto môže pre niektorých predstavovať neriešiteľný problém 1citovat
#022942
avatar
Hav-Ran:
S tým prepisovaným som to mal nastavené na začiatku, veľmi jednoduché riešenie - lenže tých súborov (MS Excel) je okolo 50 a prístupy na ne sú nepravidelné. Keď si len predsatvím, že mám držať niekde 50 txt súborov - je mi zle...

Al:
Riešenie musí byť nezávislé od "uživateľa" (nemusí o tom ani vedieť).citovat
icon #022944
avatar
Cedrom, pokiaľ ti príde miesto jedného hromadného mailu, ktorým požiadaš užívateľov, aby si v Exceli nastavili do príslušnej kolónky v nastaveniach svoje meno ako lepšie riešenie trápiť sa minimálne hodinu s písaním makra, tak ti to rozhovárať nebudem 1citovat
#022947
elninoslov
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).citovat
#022949
avatar
elninoslov:
Vystihol si problém veľmi dobre. To "sledovanie" cez VBA mám už aplikované na cca 10 súboroch a zo zápisom (do txt) problém nie je (zápis jednoducho "počká").
Môj problém (import z txt, vyhľadanie a zobrazenia uživateľa, ktorý mal súbor posledný otvorený na zápis) som práve skúsil vyriešiť procedúrou cez doplnok (pripojeným ku každému MS Excel) a ono to funguje, len je to trochu zložité a pracné...Preto beriem každý podnet a nápad ako to zjednodušiť a vyriešiť!citovat
#022950
elninoslov
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.
Příloha: rar22950_excelpristupksuborom.rar (15kB, staženo 43x)
citovat
#022956
avatar
elninoslov:
Veľká vďaka! Na začiatku som riešil niečo podobné, len som tam mal jednu easy chybu. Z tvojho návrhu som len upravil vyhľadávanie na opačné:
For i = x - 1 To 0 Step -1 ' Opakuj pre všetky riadky od konca
While InStr(Riadky(i), vbTab & vbTab) > 0 ' Odstráň opakujúce sa Tabulátory
Riadky(i) = Replace(Riadky(i), vbTab & vbTab, vbTab)
Wend
Stlpce = Split(Riadky(i), vbTab) ' Rozdeľ roadky na stĺpce oddelené Tabulátorom
Subor(i) = Stlpce(0) ' Ulož názov súboru
Meno(i) = Stlpce(1) ' Ulož meno uživateľa
Datum(i) = Replace(Stlpce(2), " ", "") ' Ulož dátum, bez medzier
Cas(i) = Left(Stlpce(3), Len(Stlpce(3)) - 1) ' Ulož čas, bez čiarky na konci

Problém vyriešený, zajtra budem testovať vo veľkom...
Vďaka elninoslov!citovat

Strana:  1 2 3   další »

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

přečíst platbu a zapsat

PavDD • 25.11. 14:02

Zrušení podmíněného formátovní vložením do funkc

Jiří497 • 25.11. 12:56

Vložení na první volnou buňku ve sloupci.

PavelJanec • 25.11. 9:05

Vložení na první volnou buňku ve sloupci.

PavelJanec • 25.11. 8:53

Zrušení podmíněného formátovní vložením do funkc

Krifry • 25.11. 8:52

Prvních 5

Fantasyk • 25.11. 3:57

Vložení na první volnou buňku ve sloupci.

elninoslov • 25.11. 0:45