› Excel e gli applicativi Microsoft Office › import csv con nome variabile
Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
-
AutoreArticoli
-
Ciao a tutti, è la prima volta che scrivo su questo forum anche se spesso ho utilizzato le vostre soluzioni per superare una serie di ostacoli nella creazione di macro in vba. Scusatemi in anticipo se mi è sfuggito ma non trovo nulla che possa aiutarmi a risolvere il mio problema.In particolare ho la necessità di importare in un foglio di lavoro ("appoggio") un file .csv che il nostro IT deposita quotidianamente su una cartella di rete. Il file è denominato in questo modo "EXPORT_201801011800" dove EXPORT_ è un nome fisso, 20180101 rappresenta la data di estrazione, 1800 rappresenta l'orario di estrazione.
Molte molte capita che l'orario di estrazione sia leggermente diverso (ad es. 1801 oppure 1805 ecc) ed in questi caso la mia query "giustamente" non trova il file.
Ho provato a sostituire il 1800 presente nel Filename con i caratteri jolly ma la risposta è sempre la stessa ossia Errore di run-time '1004'. Ho provato anche con il Like ma forse ho sbagliato qualcosa e non funziona ugualmente.Chiedo il vostro aiuto grazieDi seguito la mia macro:Sub importa()Dim percorso As String, data As String, Filename As StringSheets("Aggiorna report").Selectpercorso = Range("D7") & "\" 'in questa cella indico la cartella di rete
data = Range("D5") 'in questa cella ho prima selezionato da una tendina la data di cutoff che è nel seguente formato aaaammgg
Filename = "EXPORT_" & data & "1800" & ".CSV"Sheets("appoggio").SelectRange("A1").Select
ActiveCell.Offset(1, 0).Range("A1").Select' importo csvWith ActiveSheet.QueryTables _
.Add(Connection:="TEXT;" & percorso & Filename, Destination:=ActiveCell)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=FalseEnd With' seguono tutte le mie elaborazioniEnd Sub-
Questo argomento è stato modificato 8 anni, 2 mesi fa da
albatros54.
Ciaouna possibile soluzione penso potrebbe essere cercare tra tutti i file che stanno nella cartella quello che corrisponde al criterioHo buttato giù due righe (senza poterle verificare) completamente.Sono da inserire in sostituzione della rigaFilename = “EXPORT_” & data & “1800” & “.CSV”Aggiungi in testa le variabili
Dim fs, f, fileWil codice potrebbe essere qualcosa del genereSet fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(percorso)
For Each fileW In f.Files
If Left(fileW.Name, 15) = "EXPORT_" & Data Then
If UCase(Right(fileW.Name, 3)) = "CSV" Then
If ((Mid(fileW.Name, 16, 4) * 1 > 1745) And (Mid(fileW.Name, 16, 4) * 1 < 1815)) Then
filename = fileW.NameExit for
End If
End If
End If
NextSet fs = Nothing
Set f = Nothingnull'altro fa che cercare tra i file nella cartella percorso quello che corrisponde al tuo criterioal momento ho ipotizzato 15 minuti di anticipo/ritardo. se questo non è un problema si potrebbe sostuituire tutti gli if con un solo if e la funzione likeif ((UCase(fileW.Name)) Like ("EXPORT_" & Data & "1[7-8]##" & ".CSV")) ThenCiaoLucaGrazie Luca73,non avevo dubbi sulla possibilità di trovare qui una soluzione.Funziona tutto alla grande ed ho utilizzato un solo If con il like in quanto il range di anticipo/ritardo potrebbe essere anche più ampio di 15 minuti. Unica pecca è la velocità anche perchè l'If analizza ogni singolo file presente nella cartella di rete. Nessun problema comunque.Grazie milleForse ho trovato qualcosa di più semplice e rapidoSub pippo()
Dim fName As String
Dim data
data = "20180101"
fName = Dir(percorso & " \EXPORT_" & data & "1???.csv")
If fName = "" Then
' File not found!
Else
' File found. Open file to extract data.
End If
End SubNel caso potresti fare due ricerche confName = Dir(percorso & " \EXPORT_" & data & "17??.csv")efName = Dir(percorso & " \EXPORT_" & data & "18??.csv")CiaoLuca-
Questa risposta è stata modificata 8 anni, 2 mesi fa da
Luca73.
-
Questa risposta è stata modificata 8 anni, 2 mesi fa da
albatros54.
-
Questo argomento è stato modificato 8 anni, 2 mesi fa da
-
AutoreArticoli
Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
