Condividi:        

[Excel] Importa dati da file di testo

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] Importa dati da file di testo

Postdi antom » 07/10/08 16:57

Salve a tutti.
Eccomi a voi con un altro problemino da sottoporre.

Devo fare un importazione dati da un file di testo.
Anthony47 mi ha insegnato come si fa da Excel, io lo dovrei fare tramite macro.
Allora ho registrato i passi da eseguire e il risultato è:
Codice: Seleziona tutto
Sub importDataA()
'
' importaDati Macro

'
    Windows("Z_MACRO_VB.xls").Activate
    Sheets("attrib").Select '.Name = "attrib"
   
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\prova\Desktop\elenco.txt", Destination:=Range( _     '<<<<<path del file di testo
        "$A$1"))
        .Name = "elenco"
        .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 = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1)
        .TextFileFixedColumnWidths = Array(13)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
        End With
       
End Sub


Ora, il path segnalato con <<<<< cambia di volta in volta.
Allora ho pensato "metto il path in una variabile e gli passo la variabile!" in questo modo:
Codice: Seleziona tutto
...
Sheets("attrib").Select '.Name = "attrib"
    myPath="C:\Users\prova\Desktop\elenco.txt"   '<<<<<<<<<< variabile
    mySource = "TEXT;" & myPath
    With ActiveSheet.QueryTables.Add(Connection:= _
        mySource, Destination:=Range( _     '<<<<<path del file di testo
        "$A$1"))
...


ma non funziona. (il path è costruito con la concatenazione di alcune variabili che utilizzo altrove, ma non risiede lì il problema: il valore assunto dalla variabile mySource è corretta)

Ho pensato allora che fossero le " " che racchiudono la stringa TEXT;C:\Users\prova\Desktop\elenco.txt
Ho scritto quindi:
Codice: Seleziona tutto
mySource = Chr(34) & "TEXT;" & vPath & Chr(34)

dove Chr(34) è la codifica ASCII delle "" MA NON FUNZIONA!!! :cry: :cry: :cry: :cry: :cry: :cry: :evil:

1. Si è capito il problema? Come faccio a passargli una variabile e non il path esplicito?
2. C'è qualcuno che può aiutarmi??

Grazie mille,
Antom
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Sponsor
 

Re: [Excel] Importa dati da file di testo

Postdi Anthony47 » 07/10/08 18:17

Bentornata.
Io ti rimanderei a questa discussione: viewtopic.php?f=26&t=52931
E' un po' lunga ma solo perche' si trattava di un utente poco skillato.
Troverai un modo per fare la cosa con un inputbox, tramite l' oggetto FileDialog (lì non aveva funzionato perche' l' oggetto non esiste in Excel2000, la versione usata dall' utente) e tramite il metodo GetOpenFilename.
Se non risolvi siamo qui.

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

Re: [Excel] Importa dati da file di testo

Postdi antom » 08/10/08 09:40

Salve Anthony47.
Ti ringrazio innanzitutto!

Ho letto il topic che mi hai suggerito trovando una soluzione nelle prime righe, ma continua a non andare.
Non posso utilizzare GetOpenFilename o FileDialog. Inserisco un codice all'inizio in un input box che va a costruire parte della variabile vPath e poi tutto dev'essere fatto automaticamente. Non voglio inserire altri dati e informazioni.

Ho scritto questo codice:
Codice: Seleziona tutto
...
    mySource = Chr(34) & "TEXT;" & vPath & Chr(34)
   
    Cells(31, 2) = vPath
    Cells(32, 2) = mySource
   
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & vPath, Destination:=Range("$A$1")) _   '<<<<
        .Name = myStr
        .FieldNames = True
        .....
...


mySource è di controllo, fatto sta che la macro si blocca a FieldNames = True con il messaggio: "Errore di run-time: '424': Necessario oggetto"

I valori assunti da vPath, mySource e myStr sono rispettivamente:
C:\Users\prova\Desktop\elenco.txt <<<Nel codice uso questo valore
"TEXT;C:\Users\prova\Desktop\elenco.txt" <<<scrivendo Connection:=mySource comunque non funziona
elenco

Ho provato a cambiare un pò di cose, ma non funge. :neutral: :neutral:

A livello logico è corretto secondo me.
E credo anche a livello si sintassi.
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Re: [Excel] Importa dati da file di testo

Postdi Anthony47 » 08/10/08 14:17

Premesso che ci sono alcune cose che scrivi che non mi quadra, tipo Cells(31, 2) = vPath (perche' metti vPath in B31?), o Cells(32, 2) = mySource (idem, ma in piu' non so cosa c' e' in mySource), io ripartirei dalla macro registrata, che immagino funziona correttamente senza la flessibilita' che cerchi:
Codice: Seleziona tutto
Sub importDataA()
'
' importaDati Macro

'
    Windows("Z_MACRO_VB.xls").Activate
    Sheets("attrib").Select '.Name = "attrib"
   
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\prova\Desktop\elenco.txt", Destination:=Range( _   
        "$A$1"))
        .Name = "elenco"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        'etc etc

E' questa la macro registrata (a parte la stringa con path e filename)? La macro funziona, cioe' se la ripeti ti importa correttamente il tuo file txt?

Ora fai semplicemente questa modifica:
1) prima della With inserisci
Codice: Seleziona tutto
pippo="C:\Users\prova\Desktop\elenco.txt"

2) cambia la With (tutte le 3 righe) in questa e riprova:
Codice: Seleziona tutto
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & pippo, Destination:=Range( _   
        "$A$1"))

Fa sempre quello che ti aspetti?

Ora, mi pare che vorresti mettere parte della directory e del nome in una o piu' celle; supponiamo che metti la directory in Z1 e il nome file in Z2; scrivi quindi in Z1 "C:\Users\prova\Desktop\" (senza gli apici e con \ finale) e in Z2 "elenco.txt" (senza gli apici, con .txt) e modifica l' assegnazione di pippo in
Codice: Seleziona tutto
pippo=Range("Z1").value & Range("Z2").value

Riprova la macro; fa sempre quello che ti aspetti?

Se in una di queste 3 prove hai un esito negativo allora:
-copiaci la macro che stai usando (copia dal vba e incolla nel forum; segna a parte eventuali commenti che non sono gia' nella macro)
-dì quale tipo di errore ti compare e su quale istruzione
-se la macro usa gia' la variabile pippo, scrivi anche il contenuto di questa variabile al momento dell' errore (mentre sei in debug, vai col mouse sopra la scritta pippo, dopo qualche secondo dovrebbe comparire l' attuale valore della variabile)
-se fai una Dim di pippo (e' opzionale), definiscilo As String

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

Re: [Excel] Importa dati da file di testo

Postdi antom » 09/10/08 09:40

Ciao Anthony47.
vPath è la variabile contenente il percorso del file txt.
Stampo il suo valore in una cella del foglio giusto per verificare che la stringa sia corretta.
mySource ha la stessa valenza.

La macro funziona!!!! :roll: :roll:

Codice: Seleziona tutto
Sub importDataFILE(vPath)

Windows("FILE_VB.xls").Activate
Sheets("FILE").Select
   
    myStr = Mid(vPath, 95, 9)
    mySource = "TEXT;" & vPath
    Cells(31, 2) = vPath
    Cells(32, 2) = mySource
   
      With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & vPath, Destination:=Range _
        ("$A$1"))
        .Name = myStr
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        ......



Ho provato ieri e non fungeva, oggi funge!
Non ho cambiato nulla!!!

Comunque grazie infinite per l'aiuto! Sei stato come sempre chiarificatore ed una conferma!

A presto!
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Importa dati da file di testo":


Chi c’è in linea

Visitano il forum: Nessuno e 129 ospiti

cron