2013-02-25 15 views
6

Próbuję zautomatyzować dodawanie nowych plików txt, które mają ten sam (znany) układ.Importowanie tekstu za pomocą separatorów przy użyciu VBA

Kolumny są rozdzielane za pomocą zakładek (przycisk TAB). Czy jest to możliwe w VBA, podobnie jak w kreatorze Access, do importowania plików tekstowych?

Używam metody w VBA

+0

Najprostszym sposobem, aby rozpocząć z tego rodzaju procesu jest, aby nagrać makro Ciebie robi to ręcznie w programie Excel/Access lub cokolwiek innego, następnie pobiera wygenerowany VBA i generalizuje go dla parametrów wejściowych itp. –

+0

@JonEgerton Nie sądzę, aby można było rejestrować makra w programie Access. – Brad

+0

Nie, ale powinieneś być w stanie to zrobić w Excelu, a następnie ponownie użyć wygenerowanego VB w swoim kodzie - model obiektu będzie dostępny (o ile pobierzesz właściwe odniesienia). –

Odpowiedz

11

DoCmd.TransferText Musisz przejść przez kreatora raz, aby plik specyfikacji. Aby to zrobić, zaimportuj swój plik tekstowy jak zwykle, ale zanim wejdziesz zbyt głęboko do kreatora, kliknij w lewym dolnym rogu przycisk "Zaawansowane ...". Tutaj tworzysz plik spec.

enter image description here

Bądź ll te kolumny dopasować plik wejściowy, typy danych i wszystko. Pamiętaj, aby wybrać separator pól {tab} i odpowiedni kwalifikator tekstu, jeśli go używasz.

enter image description here

Zapisz spec (który może być później edytowany przez wracać do tego samego ekranu i klikając Specs... następnie zapisując na swój stary)

Teraz można korzystać w VBA tak

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

Istnieje parametr HasFieldNames, który będzie musiał zdecydować, czy jest to true lub false na podstawie Twojego pliku.

+1

Z technicznego punktu widzenia można również tworzyć własne specyfikacje we/wy z XML za pomocą nowszego interfejsu API profilu importu/eksportu. To trudne, ale możliwe - sam to zrobiłem.Zobacz [ImportExportSpecification] (http://msdn.microsoft.com/en-us/library/ff820988.aspx), [The New Import/Export Specification OM] (http://blogs.msdn.com/b/thirdoffive/ archive/2006/10/12/the-new-import-export-specyfikacja-om.aspx), [Nowy interfejs specyfikacji danych importu/eksportu] (http://blogs.msdn.com/b/thirdoffive/archive/2006 /10/17/the-new-import-export-specifications-ui.aspx) –

+0

@JoshuaHonig Jaka jest korzyść z samodzielnego tworzenia? Czy mapowanie jest "lepsze" niż ta metoda? To dość szybki proces, prawda? – Brad

+0

Możesz tworzyć specyfikacje w locie w czasie wykonywania. Czasami jest to konieczne, szczególnie jeśli aplikacja jest dystrybuowana do innych osób. –

2

Z kreatora importu minusem jest to, że nawet najmniejsza zmiana formatu pliku, musisz klikać wszystkich tych kroków jeszcze raz dostać pracę importu.

Sprawdź odpowiedź @ Remou w ms Access import table from file in a query, aby uzyskać prosty sposób SQL. W rzeczywistości używam tej samej metody w moim projekcie. Używam czegoś takiego (zobacz mój link do szczegółów):

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

Tylko jedno zastrzeżenie. Jeśli umieścisz tę składnię SQL w zwykłym obiekcie zapytania Access, istnieje duża szansa, że ​​program Access zmapuje go do punktu, w którym nie będzie nawet mógł otworzyć obiektu zapytania. Utwórz i zapisz zapytanie w pliku tekstowym podczas wypróbowywania go w programie Access. Gdy kwerenda jest testowany i działa, zapisz go w podprogramie VBA tak, że dostęp będzie uruchomić go dokładnie tak, jak jest, tak jak poniżej:

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 
Powiązane problemy