Condividi:        

EXCEL Macro importa file

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

EXCEL Macro importa file

Postdi bonanniluca » 13/10/08 16:09

Ciao a tutti premetto che non conosco un "H" di VBA per excel... ma ho un grosso problema, devo formattare innumerevoli file (pescati da un path ben preciso) ed impagginarli su excel.

Ho registrato una macro ed è tutto ok!!! ora mi servirebbero delle modifiche da fare... posto intanto la macro

Sub Inserimento()
'
' Inserimento Macro
'

'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Ftp\CHANGE\Log_Tibco\Tibco\listaProcessi.txt.200810061724" _
, Destination:=Range("$A$1"))
.Name = "listaProcessiTibco_ENSV11O1.txt.200810061724"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 9, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

End Sub

Ora il mio problema è che il nome file è variabile (ha un timestamp e cambia quello).
Vorrei che la macro mi pescasse tutti i file nel path e che li impagginasse (come ho fatto io con il primo) per foglio (un foglio per file)

Grazie a quell'anima buona che mi darà una dritta!!!
bonanniluca
Newbie
 
Post: 2
Iscritto il: 13/10/08 16:05

Sponsor
 

Re: EXCEL Macro importa file

Postdi Anthony47 » 13/10/08 19:35

Ciao Luca e benvenuto nel forum.
Ti rimanderei a questa discussione, dove viene spiegato come ottenere l' elenco dei files in una directory: viewtopic.php?f=26&t=61079

Modificherai questa:
SourceDir = "C:\pippo" '<<<< Aggiustare (per inserire la tua directory, quindi "C:\Ftp\CHANGE\Log_Tibco\Tibco")
e questa:
.Filename = "*.*" ' (io userei "listaProcessi*.*")
Poi correggerai questa (devi togliere la virgola in fondo):
NomeFile = .FoundFiles(i),

Inserirai il tuo codice nel ciclo For i = 1 To .FoundFiles.Count /Next i, usando il nome file che trovi nella variabile NomeFile.

Ti segnalo anche questa recente discussione che trattava di un caso molto simile al tuo: viewtopic.php?f=26&t=75763

Se hai bisogo di istruzioni piu' precise, posta ancora; comunque fatti sentire.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL Macro importa file

Postdi bonanniluca » 13/10/08 20:59

Grazie per le dritte!!! ma come ho detto per me è complicato capire come funziona!!!! non capisco un H!!!!
Potresti indicarmi quali linee modificare sullo codice che ho postato io???
bonanniluca
Newbie
 
Post: 2
Iscritto il: 13/10/08 16:05

Re: EXCEL Macro importa file

Postdi Anthony47 » 14/10/08 00:27

Mi sembri in bilico tra osare e "non volerne saperne un' H", provo a darti una spinta per osare.

1) Hai certamente guardato il primo topic che ti ho linkato (viewtopic.php?f=26&t=61079) e la mia prima risposta.
Prova a copiare esattamente il primo blocco di istruzioni in una tua macro vuota:
-vai sul vba editor, sul "modulo" dove hai registrato la tua macro
-in coda alla tua macro, scrivi "Sub prova()" (senza apici); il vba ti inserira' anche la End Sub
-in mezzo incollaci le istruzioni che prendi dal messaggio linkato sopra
-togli tutte le righe con il "punto" iniziale, che nel frattempo saranno diventate rosse per errore di sintassi
-fai le modifiche che ti ho detto nel messaggio delle 20:35
Lancia questa macro: dovresti ricevere un messaggio che dice quanti file di tipo "listaProcessi*.*" ha trovato e poi un messaggio per ogni nome file. Ti sembra coerente con la tua situazione? Se NO, in prima battuta controlla le modifiche che hai fatto (relative alla directory in cui cercare e al nome file da cercare).
La macro per ora e' solo "informativa".

2) Tu hai gia' la macro che ti importa uno specifico file; ma il secondo topic che ti ho linkato (viewtopic.php?f=26&t=75763) verte proprio su come trasformare una importazione specifica in una importazione con nome variabile.
Applicando i metodi lì descritti, hai imparato che il trucco e' sostituire in questa istruzione (e' su tre righe)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Ftp\CHANGE\Log_Tibco\Tibco\listaProcessi.txt.200810061724" _
, Destination:=Range("$A$1"))

la "connessione fissa" ("TEXT;C:\Ftp\CHANGE\Log_Tibco\Tibco\listaProcessi.txt.200810061724") con una variabile; poiche' (da mio messaggio precedente) la macro che hai collaudato al punto 1 (sopra) ti restituisce il nome file corrente nella variabile NomeFile intuisci che la connessione variabile corrisponde a "TEXT;" & NomeFile; quindi le tre righe di sopra devono diventare
Codice: Seleziona tutto
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & NomeFile _
, Destination:=Range("$A$1"))


3) Sempre come da messaggio precedente, ora "Inserirai il tuo codice nel ciclo For I = 1 To .FoundFiles.Count /Next I"; fallo [ovviamente devi copiare tutto meno che il titolo (Sub Inserimento) e la chiusa (End Sub)].
Guarda la nuova macro:
-la prima parte ti cerca tutti i files e te li presenta uno alla volta
-su quel file fai l' importazione sul tuo foglio excel con il codice della tua macro leggermente modificato (la famosa "connessione").
-a questo punto ci rendiamo conto che se ripetiamo il ciclo con il prossimo file lo importeremmo sempre sullo stesso foglio, mentre tu vorresti (se non ho capito male) che ogni file txt venisse importato su un foglio nuovo dello stesso file.xls

-niente paura; dopo il TUO "End With" (e quindi prima del MIO "Next i") inserisci questa istruzione:
Codice: Seleziona tutto
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)

Questa aggiungera' un nuovo foglio al tuo file, e su questo importerai il prossimo file txt.
-e cosi' fino alla fine...

Ora la macro e' pronta: lanciala e vedi l' effetto che fa.

Come detto (nel topic N° 1 linkato), i MsgBox sono solo ad uso dimostrativo e diagnostico; quindi quando hai confidenza che la macro fa quello che ti serve li puoi cancellare.

Ciao, fatti sentire.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "EXCEL Macro importa file":


Chi c’è in linea

Visitano il forum: Nessuno e 62 ospiti