Importazione basata su un nome file parziale (Microsoft Excel)
Ira riceve un file settimanale delimitato da testo che importa in Excel utilizzando una macro. Il nome del file era sempre lo stesso ogni settimana, quindi Ira è stato in grado di incorporarlo nella macro; questo ha reso l’importazione molto semplice. Recentemente il nuovo sistema del fornitore ha iniziato a cambiare il nome del file ogni settimana, ma i primi 12 caratteri rimangono sempre gli stessi. Ira si chiede come possa codificare la macro per importare questo file di testo senza dover modificare il nome del file ogni settimana.
Ci sono alcuni modi in cui puoi affrontare questo problema e tutti possono significare una ricodifica estesa della tua macro. Il metodo che scegli dovrebbe dipendere da come desideri svolgere il tuo lavoro ogni settimana. Ad esempio, supponiamo che tu conosca la directory in cui è memorizzato il file in arrivo, quali sono i 12 caratteri di base per il nome del file e l’estensione del nome del file. Con queste informazioni, potresti semplicemente chiedere all’utente di fornire il suffisso per il nome del file, in questo modo:
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sSuffix As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sSuffix = InputBox("Enter suffix for filename") sFileName = sBase & sSuffix & sExt Workbooks.Open Filename:=sFileName End Sub
Ovviamente puoi cambiare la base e l’estensione come desideri. Questo esempio presuppone che tu stia importando un file CSV, che dovrebbe aprirsi correttamente in Excel.
Se stai semplicemente inserendo un gruppo di file in una cartella e desideri aprirli tutti, il codice diventa un po ‘più veloce da eseguire perché non è necessario ottenere l’input dell’utente.
Sub OpenImportFiles() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = Dir(sBase & "*" & sExt) If sFileName = "" Then MsgBox "No Files Found" Else Do While sFileName > "" Workbooks.Open Filename:=sFileName sFileName = Dir Loop End If End Sub
Questo approccio apre tutti i file CSV nella cartella; per aprire un diverso tipo di file, basta cambiare ciò che è memorizzato nella variabile sExt. Una cosa da ricordare è che poiché tutti i file CSV nella cartella sono aperti, ciò significa che potrebbe aprire i file di importazione delle settimane precedenti. (Questo può o non può essere quello che vuoi.)
Tutto ciò che è stato presentato finora in questo suggerimento presuppone che quando si “importa” un file, tutto ciò che si desidera fare è aprire il file in modo da poter lavorare con esso. Potrebbe non essere così; potresti volere che la tua macro elabori il file di importazione in qualche modo e faccia qualcosa con esso. Quella funzionalità potrebbe già essere nella tua vecchia macro, quindi tutto ciò che devi fare è cambiare il modo in cui viene identificato il file di importazione. Se questo è il caso, il codice che usi può essere adattato dal codice già presentato in questo suggerimento.
Un altro modo per estrarre i dati da un file di testo e inserirli in una cartella di lavoro è usare il metodo OpenText, come mostrato in questo codice di esempio .:
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = sBase & "*" & ".txt" Workbooks.OpenText Filename:=sFileName, Origin:= _ xlMSDOS, StartRow:=1, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:= False, Space:=False, _ Other:=False, FieldInfo:=Array(1, 1), _ TrailingMinusNumbers:=True End Sub
Un’analisi completa di ciò che fa il metodo OpenText va oltre lo scopo di questo suggerimento, ma il risultato è che tutti i file di testo delimitati che iniziano con i 12 caratteri di base dovrebbero essere aperti nelle cartelle di lavoro.
È possibile modificare il funzionamento del metodo modificando i parametri. Dovrai prestare particolare attenzione ai parametri utilizzati per specificare quale carattere delimitatore deve essere utilizzato.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (13472) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.