< návrat zpět

MS Excel


Téma: Export listu do text. souboru - problém s makrem rss

Zaslal/a 4.4.2024 17:01

Dobrý den,

prosím o radu, nevím, kde dělám chybu. Napsal jsem si makro na export listu do textového souboru. Zdrojový list ("TXT_5001") je v aktivním sešitu. Textový soubor ("Z:\pokus_export.zap") se na zadaném místě správně vytvoří. Až potud vše funguje podle očekávání. Zároveň ale makro zdrojový list přejmenuje z původního "TXT_5001" na "pokus_export" a celý sešit se uloží jako "pokus_export.zap" do aktuálního adresáře. Nový sešit má příponu "zap", ale je to XLS. Používám Excel 2003 (jsem na něj zvyklý). Sešit včetně makra dávám do přílohy.

Děkuji za pomoc.

Sub Export_txt_5001()

' Zkopírování dat do prázdného listu
Sheets("5001").Range("vyber_copy_5001").Copy
Sheets("TXT_5001").Range("A1").PasteSpecial xlPasteValues

' Vymazání nepotřebných řádků
Application.Goto ActiveWorkbook.Sheets("TXT_5001").Range("A1")
Dim i As Byte
For i = 1 To 220 Step 1
Dim var_hodnota_ve_sloupci_a As Variant
var_hodnota_ve_sloupci_a = ActiveCell.Value
If var_hodnota_ve_sloupci_a = 0 Or var_hodnota_ve_sloupci_a = "" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Next i

' Export listu do textového souboru
Sheets("TXT_5001").SaveAs Filename:="Z:\pokus_export.zap", FileFormat:=xlUnicodeText, CreateBackup:=False, Local:=False

End Sub

Příloha: zip56382_zapisnik.zip (77kB, staženo 9x)
Zaslat odpověď >

#056383
elninoslov
Príloha nejde stiahnuť, skúste ju priložiť ešte raz.citovat
#056386
avatar
Děkuji za upozornění. Přílohu jsem uložil znovu, stahování by již mělo fungovat.

Lubomírcitovat
#056388
elninoslov
-Jedná sa tam vždy iba o číselné hodnoty? Teda nie je v exporte text s diakritikou?
-Výsledné kódovanie textového súboru ZAP musí byť UTF-16 LE BOM?
-Desatiny sú v exporte vždy na 4 desatinné miesta?
-Desatinný oddeľovač v exporte je bodka "." ?
-"výška stroje/cíle" je vždy "0.0000" alebo je ten stĺpec určený na manuálne dopisovanie.

Pýtam sa to všetko preto, lebo tak ako to robíte, by som to určite nerobil.

Príklad:
Příloha: xls56388_zapisnik.xls (373kB, staženo 3x)
citovat
#056392
elninoslov
Táto úprava urobí UTF-16 LE BOM, len v E2003 sa musí urobiť export do TXT a následne premenovať na ZAP. V E2024 to ide rovno to ZAP.
Upravil som aj rozhasené podm. formátovanie.

Neprišiel som na to, prečo sa za použitú oblasť považujú všetky stĺpce (256) akonáhle sa skryjú, no iba v tých prvých 3 listoch. Inde sú tiež skryté, ale ako použitá oblasť je iba skutočne použitá. Skúšal som aj vytvoriť znovu listy, vytvoriť kopírovaním z tých čo sú OK, ale vždy to dopadne rovnako. Zdá sa mi, že to neúmerne zväčšuje súbor.
Příloha: xls56392_zapisnik2.xls (390kB, staženo 4x)
citovat
#056394
avatar
- Jedná se vždy jen o číselné hodnoty.
- Jestli narážíte na formát xlUnicodeText, je to náhodně zvolený formát. Nejdříve jsem zkusil xlText, ale textový soubor se nevytvořil, tak jsem zůstal u prvního formátu, který fungoval. Teoreticky by mělo stačit nejjednodušší kódování. Zatím vytvářím textové soubory ručním kopírováním do poznámkového bloku a ukládáním. Tuto kompatibilitu textových souborů bych chtěl zachovat pro případ potřeby ručního vytvoření nebo editace souboru v notepadu. Program, který s textovými soubory dále pracuje, je nastevený na nějaké kódování. To se dá nejspíš změnit, ale mohl by potom být problém s načítáním souborů vytvořených v notepadu. Nechci zasahovat do něčeho, co dlouhodobě funguje a je vyzkoušené.
- Kromě sloupce A, kde jsou celá čísla a musí to tak být, mají všechna ostatní čísla 4 desetinná místa.
- Desetinný oddělovač je tečka a musí to tak být.
- V drtivé většině případů je "výška stroje/cíle" 0.0000, ale může se stát, že hodnota bude jiná. V textovém souboru ten sloupec musí být.

Původně jsem úlohu chtěl řešit kopírováním oblasti do textového souboru ale nevěděl jsem, jak to naprogramovat. Ukládání listu je náhradní řešení a nebráním se jinému.

Teprve teď jsem si všimnul přílohy. Podívám se na ni.

Děkuji.citovat
#056395
avatar
Dodatečně přeji hezký den a moc děkuji za vytvořené makro. Ve Vašem kódu jsem se ještě nezorientoval, ale vše funguje. Kódování textového souboru vyhovuje. Následný program ho bere. Vyhovuje i to, že se textové soubory ukládají do adresáře, ve kterém je sešit. Problém je jenom jejich název. V adresáři může být a často bývá více sešitů. Vytvářely by se potom textové soubory se shodným názvem. Aby vše zapadalo do systému měl by být název souboru poskládaný z údajů na listu "SOR" takto:
pro list SOR: [B17]_[B19]_[B20].txt
pro listy 500x: [B17]_[B19]_[B20]_500x.zap

Až porozumím Vašemu kódu, asi bych takovou úpravu zvládnul sám, ale kdybyste byl ochotný makro upravit, budu rád.citovat
#056398
avatar
Hotovo. Vše funguje podle mých představ. Ještě jednou díky za pomoc.

Lubomírcitovat
#056410
elninoslov
Sorry, nebol som tu pár dní. Urobil som Vám tam podrobný popis, ako to funguje, odôvodnil prečo sú tam kontroly, pridal som odchyt chýb čo ma napadli, že by mohli nastať, a snáď sprehľadnil kód.

Omrknite.

PS: Neviem načo sú tam tie ďalšie definované názvy, ale Body_5001 na konci chýbajú 2 riadky (lebo ostatné Body to tam majú).
Příloha: xls56410_zapisnik3.xls (392kB, staženo 1x)
citovat

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