2013-02-25 130 views
6

我正在嘗試自動添加新的txt文件,它們都具有相同(已知)佈局。使用VBA導入帶分隔符的文本

使用選項卡(TAB按鈕)分隔列。是否有可能像在Access嚮導中那樣在VBA中執行此操作以導入文本文件?

我正在使用VBA

+0

開始與這種過程的最簡單的方法來記錄你的宏在excel/access或其他任何地方手動執行它,然後將生成的VBA並將其推廣爲輸入參數等。 – 2013-02-25 12:39:53

+0

@JonEgerton我不相信您可以在Access中記錄宏。 – Brad 2013-02-25 15:06:44

+0

不,但您應該可以在Excel中這樣做,然後將生成的VB重新用於代碼 - 只要您拉入正確的引用,對象模型將可用。 – 2013-02-25 15:15:52

回答

11

DoCmd.TransferText方法你需要經歷一次嚮導,使您的規範文件。爲此,請像正常一樣導入文本文件,但在深入到嚮導中之前,請點擊左下角的「高級...」按鈕。這是您製作規格文件的地方。

enter image description here

讓LL這些列與您輸入的文件,數據類型和所有。請確保選擇{tab}字段分隔符和相應的文本限定符(如果使用的是)。

enter image description here

保存規格(其可之後又回到這個相同的屏幕和點擊Specs...進行編輯然後保存在你的舊)

現在您可以在VBA中使用這樣

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

有一個參數HasFieldNames,你必須根據你的文件來決定它是否是truefalse

+1

從技術上講,您還可以使用新的導入/導出配置文件API從XML組裝自己的I/O規範。這很棘手,但可能 - 我以前自己做過。請參見[ImportExportSpecification](http://msdn.microsoft.com/zh-cn/library/ff820988.aspx),[新導入/導出規範OM](http://blogs.msdn.com/b/thirdoffive/) archive/2006/10/12/the-new-import-export-specification-om.aspx),[新的導入/導出規格UI](http://blogs.msdn.com/b/thirdoffive/archive/2006 /10/17/the-new-import-export-specifications-ui.aspx) – 2013-02-25 14:34:30

+0

@JoshuaHonig你自己有什麼好處?映射是否比這個方法「更好」?這是一個相當快的過程,不是嗎? – Brad 2013-02-25 14:42:53

+0

您可以在運行時即時創建規格。有時候這是必要的,特別是如果一個應用程序分發給其他人。 – 2013-02-25 15:24:43

2

使用導入嚮導的缺點是,即使在文件格式絲毫的改變,你必須通過所有這些步驟再次單擊以獲取導入工作。

查看@ Remou在ms Access import table from file in a query中的回答,瞭解使用直接SQL執行此操作的方法。我實際上在我的一個項目中使用了相同的方法。我用的是這樣的(見我的鏈接,詳細信息):

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

只是一個警告。如果將此SQL語法放入正常的Access查詢對象中,Access很可能會將其破壞到無法打開查詢對象的程度。因此,在Access中試用時,將查詢編寫並保存在文本文件中。一旦查詢測試工作,將其保存在VBA子程序,使Access將正好運行原樣,像這樣:

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 
相關問題