2013-02-25 12 views
6

Sto tentando di automatizzare l'aggiunta di nuovi file txt, che hanno tutti lo stesso layout (noto).Importazione di un testo con separatori tramite VBA

Le colonne sono separate utilizzando le schede (il pulsante TAB). È possibile farlo in VBA come nella procedura guidata di accesso per importare file di testo?

Sto usando il metodo DoCmd.TransferText in VBA

+0

Il modo più semplice per iniziare con questo tipo di processo è quello di registrare una macro di voi eseguendolo manualmente in Excel/Access o altro, quindi prendi il VBA generato e generalizzalo per parametri di ingresso ecc. –

+0

@JonEgerton Non credo che tu possa registrare macro in Access. – Brad

+0

No, ma dovresti essere in grado di farlo in Excel, quindi riutilizzare il VB generato nel codice: il modello a oggetti sarà disponibile (purché si inseriscano i riferimenti corretti). –

risposta

11

Avrai bisogno di passare attraverso la procedura guidata una volta per rendere il vostro file di specifica. Per fare ciò, importa il tuo file di testo come normale, ma prima di entrare troppo in profondità nella procedura guidata fai clic su in basso a sinistra, il pulsante "Avanzate ...". Qui è dove si crea il file spec.

enter image description here

Fai ll queste colonne abbinare il vostro file di input, i tipi di dati e di tutti. Assicurati di selezionare il delimitatore di campo {tab} e il qualificatore di testo appropriato se ne stai usando uno.

enter image description here

Salva il tuo spec (che può essere successivamente modificato da tornare in questo stesso schermo e cliccando Specs... quindi un risparmio di oltre il vostro vecchio)

Ora è possibile utilizzare in VBA come questo

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

C'è un parametro HasFieldNames che dovrai decidere se è true o false in base al tuo file.

+1

Tecnicamente è anche possibile assemblare le proprie specifiche I/O da XML utilizzando la nuova API profilo di importazione/esportazione. È difficile ma possibile - l'ho già fatto prima io.Vedere [ImportExportSpecification] (http://msdn.microsoft.com/en-us/library/ff820988.aspx), [Il nuovo OM di importazione/esportazione specifica] (http://blogs.msdn.com/b/thirdoffive/ archivio/2006/10/12/the-new-import-export-specification-om.aspx), [La nuova interfaccia utente delle specifiche di importazione/esportazione] (http://blogs.msdn.com/b/thirdoffive/archive/2006 /10/17/the-new-import-export-specifications-ui.aspx) –

+0

@JoshuaHonig Qual è il vantaggio di farlo da solo? La mappatura è "migliore" di questo metodo? Questo è un processo piuttosto veloce, no? – Brad

+0

È possibile creare specifiche al volo in fase di esecuzione. A volte è necessario, soprattutto se un'applicazione viene distribuita ad altre persone. –

2

Con il wizard di importazione lo svantaggio è che anche per il minimo cambiamento nel formato di file, dovrai fare clic su tutti questi passaggi ancora una volta per far funzionare l'importazione.

Verificare @ risposta di Remou in ms Access import table from file in a query per un modo per farlo in SQL dritto. In realtà sto usando lo stesso metodo in un mio progetto. Io uso qualcosa del genere (vedi il mio link per i dettagli):

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

Solo un avvertimento. Se si inserisce questa sintassi SQL in un oggetto di query Access normale, è probabile che Access lo interrompa fino al punto in cui non sarà nemmeno in grado di aprire l'oggetto query. Quindi componi e salva la query in un file di testo mentre lo provi in ​​Access. Una volta che la query è testato e funzionante, salvarlo in una subroutine VBA in modo che l'accesso verrà eseguito esattamente come è, in questo modo:

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 
Problemi correlati