/ / Import textu so separátormi pomocou VBA - vba, ms-access, ms-access-2007, access-vba

Import textu s oddeľovačmi pomocou VBA - vba, ms-access, ms-access-2007, access-vba

Snažím sa automatizovať pridávanie nových súborov txt, ktoré majú rovnaké (známe) rozloženie.

Stĺpce sú oddelené pomocou záložiek (tlačidlo TAB). Je možné urobiť to vo VBA ako v Sprievodcovi prístupom na import textových súborov?

Používam DoCmd.TransferText metóda vo VBA

odpovede:

11 pre odpoveď č. 1

Aby ste mohli urobiť, budete musieť raz prejsť sprievodcomsúbor špecifikácií. Ak to chcete importovať ako textový súbor, ako je obvyklé, ale skôr ako sa dostanete do sprievodcu, kliknite vľavo dole na tlačidlo „Rozšírené ...“. Na tomto mieste vytvoríte súbor so špecifikáciou.

tu zadajte popis obrázku

Skontrolujte, či tieto stĺpce zodpovedajú vášmu vstupnému súboru, dátovým typom a všetkým. Nezabudnite vybrať {tab} oddeľovač polí a príslušný textový kvalifikátor, ak ho používate.

tu zadajte popis obrázku

Uložte špecifikáciu (ktorú môžete neskôr upraviť tak, že sa vrátite na tú istú obrazovku a kliknete na tlačidlo Specs... potom uložte na starú)

Teraz môžete použiť vo VBA, ako je tento

DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath

Existuje parameter HasFieldNames že sa musíte rozhodnúť, či je true alebo false na základe vášho súboru.


2 pre odpoveď č. 2

V sprievodcovi importom je nevýhodou to, že aj pri najmenších zmenách vo formáte súboru musíte kliknúť na všetky tieto kroky. ešte raz aby fungoval import.

Pozrite sa na @Remouovu odpoveď ms Prístup k tabuľke importu zo súboru v dotaze pre spôsob, ako to urobiť v priamom SQL. Vlastne používam rovnakú metódu aj v mojom projekte. Používam niečo také (podrobnosti nájdete v mojom odkaze):

insert into MyTable (column-list...)
select (column-list...)
from [data-source-specifications].[file-name]
any-other-clauses...;

Iba jedna výhrada. Ak vložíte túto syntax SQL do normálneho objektu dotazu programu Access, existuje veľká šanca, že program Access ho upraví do bodu, v ktorom vyhral, ​​dokonca nebude môcť objekt dotazu otvoriť. Zostavte a uložte dotaz do textového súboru, kým ho vyskúšate v programe Access. Po otestovaní a funkčnosti dotazu ho uložte do podprogramu VBA, aby ho program Access spustil presne tak, ako je:

sub MyTableImport()
sqlStr = "         insert into MyTable (column-list) " " leave a space at the
sqlStr = sqlStr & "select (column-list...) " " end of each line of the string
sqlStr = sqlStr & "from [data-source-specifications].[file-name] "
sqlStr = sqlStr & "any-other-clauses... ;"

DoCmd.RunSQL sqlStr
end sub