2013-02-25 30 views
6

Tôi đang cố gắng tự động thêm các tệp txt mới, tất cả đều có cùng bố cục (đã biết).Nhập văn bản có dấu tách bằng cách sử dụng VBA

Các cột được phân cách bằng cách sử dụng các tab (nút TAB). Có thể thực hiện điều này trong VBA như trong trình hướng dẫn Access để nhập các tệp văn bản không?

Tôi đang sử dụng phương pháp DoCmd.TransferText trong VBA

+0

Cách dễ nhất để bắt đầu với quá trình này là ghi lại macro của bạn làm điều đó bằng tay trong excel/truy cập hoặc bất cứ điều gì, sau đó lấy VBA tạo ra và tổng quát nó cho params đầu vào vv –

+0

@ JonEgerton Tôi không tin rằng bạn có thể ghi lại các macro trong Access. – Brad

+0

Không, nhưng bạn sẽ có thể làm như vậy trong Excel, và sau đó tái sử dụng VB được tạo ra vào mã của bạn - mô hình đối tượng sẽ có sẵn (miễn là bạn kéo các tham chiếu bên phải). –

Trả lời

11

Bạn sẽ cần phải đi qua trình hướng dẫn một lần để tạo tập tin đặc điểm kỹ thuật của bạn. Để thực hiện việc này, hãy nhập tệp văn bản của bạn như bình thường nhưng trước khi bạn nhận được quá sâu vào trình hướng dẫn, hãy nhấp vào phía dưới cùng bên trái, nút "Nâng cao ...". Đây là nơi bạn làm cho tập tin spec của bạn.

enter image description here

Make sẽ các cột phù hợp với tập tin đầu vào của bạn, kiểu dữ liệu và tất cả. Đảm bảo chọn dấu phân cách trường {tab} và trình độ văn bản thích hợp nếu bạn đang sử dụng.

enter image description here

Lưu spec của bạn (mà sau này có thể được chỉnh sửa bằng cách trở lại với cùng một màn hình này và nhấp Specs... sau đó lưu trên bạn cũ một)

Bây giờ bạn có thể sử dụng trong VBA như thế này

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

Có thông số HasFieldNames mà bạn sẽ phải quyết định xem đó là true hoặc false dựa trên tệp của bạn.

+1

Về mặt kỹ thuật, bạn cũng có thể tập hợp các thông số I/O của riêng mình từ XML bằng cách sử dụng API hồ sơ xuất/nhập mới hơn. Đó là khó khăn nhưng có thể - Tôi đã tự mình làm điều đó trước đây.Xem [ImportExportSpecification] (http://msdn.microsoft.com/en-us/library/ff820988.aspx), [Thông số xuất/nhập mới OM] (http://blogs.msdn.com/b/thirdoffive/ lưu trữ/2006/10/12/new-import-export-specification-om.aspx), [Giao diện người dùng mới xuất/nhập UI] (http://blogs.msdn.com/b/thirdoffive/archive/2006 /10/17/the-new-import-export-specifications-ui.aspx) –

+0

@JoshuaHonig Lợi thế của việc tự tạo ra nó là gì? Bản đồ có "tốt hơn" so với phương pháp này không? Đây là một quá trình khá nhanh, phải không? – Brad

+0

Bạn có thể tạo thông số kỹ thuật khi đang chạy. Đôi khi điều đó là cần thiết, đặc biệt nếu một ứng dụng được phân phối cho người khác. –

2

Với trình hướng dẫn nhập, nhược điểm là ngay cả khi thay đổi nhỏ nhất trong định dạng tệp, bạn sẽ phải nhấp qua tất cả các bước đó một lần nữa để làm việc nhập.

Xem câu trả lời của @ Remou theo số ms Access import table from file in a query để biết cách thực hiện trong SQL thẳng. Tôi đang thực sự sử dụng cùng một phương pháp trong một dự án của tôi. Tôi sử dụng một cái gì đó như thế này (xem liên kết của tôi để biết chi tiết):

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

Chỉ cần một báo trước. Nếu bạn đặt cú pháp SQL này vào một đối tượng truy vấn thông thường, thì có khả năng Access sẽ mang nó đến điểm mà thậm chí nó sẽ không thể mở đối tượng truy vấn. Vì vậy, soạn và lưu truy vấn trong một tệp văn bản trong khi bạn dùng thử trong Access. Khi truy vấn được kiểm tra và làm việc, hãy lưu truy vấn đó vào một chương trình con VBA để Access sẽ chạy chính xác như sau:

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 
Các vấn đề liên quan