< návrat zpět

MS Excel


Téma: Import dat z .txt rss

Zaslal/a 18.2.2015 18:52

Dobrý den, rád bych požádal o pomoc.
Potřebuji propojit data, která mám v souboru "kriteria.txt"
a potřebuji to propojit relativním odkazem přes Vba.

Předem děkuji

Zaslat odpověď >

icon #023729
avatar
Tak toto asi bude potrebné najprv z tvojej strany trochu rozviesť, pokiaľ ti má niekto pomôcť.citovat
#023732
avatar
Dobrá, omlouvám se.

Mám složku na ploše, například "kritéria". V té složce je stejnojmený soubor .txt i .xls. No a potřebuju vložit data z .txt do .xls, což by nebyl problém. Ale bohužel to potřebuju udělat relativním odkazem, protože bude potřeba soubor .xls přesouvat do dalších PC, kde bude stejný soubor .txt, ale už bude na jiném umístění. Jde mi o to, jak to napsat, aby hledal jen v té složce, kde je onen .xls soubor.

Možná se ještě hodí info, že by to mělo pracovat pod windows 8.1 64Bit a office 2013.
Díkycitovat
icon #023733
avatar
V téme máš uvedené Import. V otázke zmieňuješ prepojenie. V upresnení hovoríš o vložení. Relatívnym odkazom (adresovaním) sa myslí v exceli niečo úplne iné, než, ja vlastne neviem, čo máš relatívnym odkazom na mysli ty, snáď linkovanie? Nene, takto sa nikam nepohneme. Budeš sem musieť dať prílohu s popisom, čo sa presne chce. T.j., štruktúra .txt bude rovnaká? Obsahuje len jeden riadok, jednu hodnotu, alebo čo vlastne? Toto všetko musíš uviesť ty, nemôžeš čakať, že to z teba bude niekto páčiť. Ja nesľubujem, že to budem riešiť, ale rozhodne zvýšiš svoje šance, že sa na to prípadne niekto pozrie, pokiaľ sa trochu rozpíšeš a dáš sem v ideálnom prípade i tú prílohu.

edit: pokiaľ ale teda ten súbor bude vždy v nejakej zložke na ploche a ty akurát nevieš, ako cez VBA zistiť cestu k ploche na konkrétnom PC, tak k tomu som nedávno odpovedal týpkovi, ktorý potom už ani nezabučal, tuná:http://wall.cz/index.php?m=topic&id=23530#post-23534

edit2: vlastne, píšeš, že .xls a .txt bude vždy v tom istom adresári, k zisteniu jeho umiestnenia potom môže poslúžiť jednoduché ThisWorkbook.Path v kóde umiestenom v danom .xls. Ale, písal som, do hlavy ti nevidím a súbory k dispozícii nemám, takže ma nútiš hádať, moc ma to nebaví. Snažiť sa musíš v prvom rade ty sám.citovat
#023735
avatar
Dobrá, vidím, že jsi celkem podrážděný a možná je to i z části má vina, že se nepřesně vyjadřuji, očekával jsem že bude stačit jeden - dva řádky kódu, ale možná je to složitější, takže odpoledne sem dám tedy ten soubor.

Moc nerozumím tomu, proč je soubor zapotřebí, ale problém s tím nemám.. Jde mi jen o vložení dat z .txt do .xls.
Naprogramované to mám a import dat funguje bezvadně, ale jen na tom jednom místě. Problém tedy nastane, jakmile složku přemístím, proto jsem měl za to, že hledám relativní odkaz na cestu, kde se soubor právě nachází. Složka nemusí být nutně na ploše, ale může být vlastně kdekoliv, záleží na tom, kam si ji uživatel vloží.

Vím, že by mi asi mohla pomoci fce. environ, ale zatím jsem nepřišel na to, jak to do kódu zakomponovat.

Každopádně díky za tvůj čas..citovat
icon #023737
eLCHa
@Dejavu
Upozorňuji, že nejsem podrážděný, naopak jsem velmi klidný a žádám Vás o zamyšlení.

Přečtěte si Váš úvodní příspěvek ještě jednou nebo dvakrát.
Máte?
Pokud o tom nic nevíte, myslíte si, že je to zcela pochopitelné? Ruku na srdce - nemusíte to psát, ale kolik času jste věnoval tomu, než jste vytvořil ty 3 řádky? Použil jste pojem relativní odkaz - přemýšlel jste nad tím pojmem, když jste ho psal (hledal jste na internetu jestli se používá ve významu, který máte na mysli nebo jste si myslel, že to prostě pochopíme?

No - a nevím, jestli jste Váš třetí příspěvek měl vůbec psát.
Protože věta "Naprogramované to mám a import dat funguje bezvadně, ale jen na tom jednom místě" na mně působí, že si z nás děláte legraci. Tak Vy už to máte, funguje Vám to a nedáte to tu? Ani ve formě kódu? To jako máme ten kód vytvořit celý znovu a Vy si z něj vezmete jen ten 1 řádek a nebo nakonec napíšete - Ne takhle to nejde - mám to tak a tak a nejde mi to do toho vložit.

"Moc nerozumím tomu, proč je soubor zapotřebí, ale problém s tím nemám."
Tato věta je taky perla. Jestli si myslíte, že jsme kouzelníci, přečteme si Váš dotaz a prostě napíšeme "jeden - dva řádky kódu", tak to jste na omylu. Než tady něco vložím, tak to otestuji, protože nejsem chodící encyklopedie a nesypu kód z rukávu. Pokud nemám čas a jsem si téměř jistý, že to co tu dám je podle mně to správné řešení - tak to tam napíšu, že to není otestované - pokud to tam není, znamená to, že jsem to vyzkoušel. Takže - abych mohl napsat ty 2 řádky kódu, musel bych si nejdříve vytvořit soubor xls a ve stejné složce soubor txt, protože i když to pro Vás není problém, tak tu přílohu tady stejně nevložíte.

Když to shrnu - kdybyste tady dal přílohu nebo alespoň Váš kód, tak ve 21:50 Vám tady AL vložil jedno až dvouřádkovou úpravu, která by 100% vyřešila Váš problém a jemu by to zabralo méně času, než který věnoval následujícímu příspěvku. Že se mu chtělo o půlnoci smolit takový román se divím i já - já bych se na to rovnou vyprd.

"Vím, že by mi asi mohla pomoci fce. environ, ale zatím jsem nepřišel na to, jak to do kódu zakomponovat.". Nevíte nic, jen si to myslíte. Co víte o funkci Environ?
Btw - řešení máte v ALově půlnočním příspěvku a zvýraznil ho tučně...

Prosím, respektujte náš čas. Každý máme svůj důvod, proč Vám pomáháme a děláme to zadarmo.

Poslední poznámka - neplatí pro Vás, vy alespoň píšete česky - než tenhle román odešlu - 3x (opravdu) si ho přečtu a opravuji překlepy (a i tak se nějaké objeví)citovat
icon #023745
avatar
@Dejavu
v plnom rozsahu platí to, čo tu uviedol kolega, ktorému ďakujem za jeho čas, ktorý tomu venoval.
Opäť operuješ s pojmom relatívny odkaz (na cestu). Mám za to, že teda myslíš premennú?, do ktorej by šiel uložiť reťazec s cestou k daným 2 súborom. Ako som zmienil, je možné použiť vlastnosť Path objektu Workbook. Pokiaľ sa teda bude kód nachádzať v danom .xls, tak cez ThisWorkbook.Path. V prípade, že by sa kód nachádzal napr. v nejakom inom xls (nepredpokladám, ale nevidím ten kód, čiže možné to je), tak v prvom kroku uložiť xls, do ktorého nejakým spôsobom prenášaš dáta z txt, do objektovej premennej typu Workbook a pre zistenie cesty potom použiť vlastnosť Path u danej objektovej premennej.
Buď to zvládneš z popisu sám (asi by si mal), alebo sem daj prílohu, prípadne aspoň ten kód. Keby si sem býval dal prílohu (dôvody, po tom, čo ich uviedol eLCHa, sú už snáď pochopiteľné), mohlo to byť dávno vyriešené. Takto akurát mrháme časom a riešime zbytočne, či som podráždený 1citovat
#023776
avatar
Dobrá, dohadovat se tu nechci..

Večer na to mrknu, zatím sem dávám slíbenou přílohu.
Příloha: rar23776_kriteria.rar (36kB, staženo 31x)
citovat
icon #023777
avatar
Ako som uviedol, riešením je použitie ThisWorkbook.Path. Zdráhal si sa sem dať prílohu, mám sto chutí tuná s vysvetľovaním končiť, páč mám za to, že doplnenie do kódu by si pri troche snahy zvládol a lenivosť nechcem podporovať, o dôvodoch si môžeš myslieť, čo chceš. Ale urobím dobrý skutok a dole nájdeš minimálnu modifikáciu tvojho kódu, ktorá pracuje s tým, čo z nejakého dôvodu nazývaš relatívnym odkazom. Bude fungovať za podmienky, že xls i txt sa budú nachádzať v rovnakom adresári, predpokladám, že aspoň uvedená podmienka platí, ako si tvrdil. Tú spústu balastu, x-krát úplne zbytočne select atd. som neriešil, doplnil som skutočne akurát novo zadeklarovanú premennú, naplnil ju hodnotou a na ňu odkázal. T.j. 3 riadky, pokiaľ by som to chcel urobiť prasácky, tak by to bol jeden:

Private Sub CommandButton1_Click()
' Vloží data z cesty viz. níže. Soubor musí být s pøíponou .txt, jinak nebude makro fungovat.

Dim myPath As String
myPath = ThisWorkbook.Path & "\"

Range("A1").Select
Columns("A:DD").Select
Selection.ClearContents
Range("A1").Select

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & myPath & "kriteria.txt", Destination:=Range("$A$2"))
'.CommandType = 0
.Name = "kriteria"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 852
.TextFileStartRow = 1
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(8, 6, 12, 9, 9, 10, 10)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Columns("C:H").Select
Selection.ColumnWidth = 13.14
Columns("A:B").Select
Selection.ColumnWidth = 2.86
Selection.ColumnWidth = 6.71
Columns("A:L").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:V").Select
Selection.NumberFormat = "0.00"
Range("I1").Select

End Sub

edit: Teraz som si uvedomil, že to svoje makro si asi celé nahral záznamníkom, akurát ho potom dal pod tlačítko, to bola jediná úprava. Takže, pravdepodobne som príliš trdý, pokiaľ ťa viním z lenivosti, proste úprava makra je zatiaľ nad tvoje sily. V tom prípade beriem späť tú lenivosť. Zaujímalo by ma ale v takom prípade, ako by si si predstavoval pomoc bez toho, aby si zverejnil kód. Niečo mi tu nehrá 1citovat
#023793
avatar
Děkuju za pomoc, teď to běží jak má, s těmi úpravami máš pravdu, mé schopnosti v excelu jsou zatím na začátečnické úrovni, ale něco sem si prošel a na základě toho kód vygeneroval nahráváním makra a následně upravil, někde jsem četl, že se cesta hledá přes relativní odkaz a tak jsem tento termín bral za správný.. bohužel nevím jak jinak to nazvat..
a proto že sem zhruba pochopil kód, který je v mém sešitě, myslel jsem, že bude stačit zjistit, jen ony dva řádky kódu.
Snad to takto jako vysvětlení stačí.citovat

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

Čas od do

lubo • 19.4. 16:30

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32