Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Excel vba lettura file txt

244 views
Skip to first unread message

Marco Porzio

unread,
Apr 18, 2018, 4:27:50 AM4/18/18
to
Ciao a tutti,
ho la necessità di mettere i dati di un file txt in un file Excel, nello specifico:
- Aprire il file txt
- Andare all'ultima riga
- leggere i dati e metterli nelle celle

il file txt è così composto:
Data;Lotto;Fornitore;Valore1;Valore2
quindi:
cercare la 1° riga vuota nel foglio Excel
A1=Data
B1=Lotto
C1=Fornitore
D1=Valore1
E1=Valore2

oppure, se più comodo, cancello tutto ed importo tutte le righe del file txt

ringrazio per ogni suggerimento sul codice da utilizzare
Marco

casanmaner

unread,
Apr 18, 2018, 6:07:05 AM4/18/18
to
Con la procedura di conversione guidata dell'importazione da file di testo non riesci a importare i dati?

Marco Porzio

unread,
Apr 18, 2018, 6:30:33 AM4/18/18
to
Sì, riesco a farlo ma mi serviva usare il codice...
ora ho avuto l'idea di fare l'import manuale registrando la macro ed ho ottenuto il codice da utilizzare...

Potrebbe funzionare a parte il fatto che nella prima e ultima cella ho le virgolette. Queste ci sono perchè vengono generate nell'export!

il codice che mi popola il file txt è questo:

Dim strFile_Path As String
strFile_Path = "C:\MioFile.txt"

Open strFile_Path For Append As #1
Write #1, Range("AI3").Value & ";" & Range("AJ3").Value & ";" & Range("AK3").Value & ";" & Range("AL3").Value & ";" & Range("AM3").Value
Close #1

e i dati me li mette così:

"18/04/2018;123456;MioFornitore;0.56;1.25"

credo che eliminando le " nel file txt riesco a fare tutto, come detto ho visto il codice di import registrando la macro mentre lo facevo, il problema ora si sposta su export
grazie
Marco

Marco Porzio

unread,
Apr 18, 2018, 6:40:26 AM4/18/18
to
Aggiungo che dopo l'import devo però terminare il file txt se no rimane aperto e non posso aggiornarlo dal file che crea l'export, come termino i txt aperti?
grazie ancora
Marco

casanmaner

unread,
Apr 18, 2018, 7:18:24 AM4/18/18
to
Ciao,
al momento per quanto riguarda le doppie virgolette prova a utilizzare Print in luogo di Write nel popolare il file di testo.

Marco Porzio

unread,
Apr 18, 2018, 7:32:08 AM4/18/18
to
Il giorno mercoledì 18 aprile 2018 13:18:24 UTC+2, casanmaner ha scritto:
> Ciao,
> al momento per quanto riguarda le doppie virgolette prova a utilizzare Print in luogo di Write nel popolare il file di testo.

ok, ora ho una riunione.. domani provo e ti dico a che punto sono
buona giornata
Marco

casanmaner

unread,
Apr 18, 2018, 11:38:07 AM4/18/18
to
Per importare i dati dal file txt potresti provare questa procedura VBA.
Vedi questo file di esempio (dove modificare il percorso e il nome del file).
https://www.dropbox.com/s/8vok7djp97fgtc3/Excel%20vba%20lettura%20file%20txt.xlsm?dl=0

questo il codice presente nel modulo1:

'---
Option Explicit


Sub LetturaFileTxt()

Const strFile_Path As String = "D:\Dropbox\Microsoft it office excel\MioFile.txt"
Const sNomeFoglioDestinazione As String = "Foglio1"
Const sPrimaCellaDestinazione As String = "A1"

Dim WsDest As Worksheet
Dim rngDest As Range

Set WsDest = ThisWorkbook.Worksheets(sNomeFoglioDestinazione)
Set rngDest = WsDest.Range(sPrimaCellaDestinazione)

WsDest.Cells.ClearContents

With WsDest.QueryTables.Add(Connection:="TEXT;" & strFile_Path, _
Destination:=rngDest)
.Name = "XXXXX"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells 'xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1251
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(xlDMYFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
.Delete
End With
End Sub

'---

nota che a parte il primo campo impostato come giorno/mese/anno gli altri quattro sono impostati come testo perché non conosco la tua situazione reale.
Vedi la proprietà .TextFileColumnDataTypes dove agire per impostare il formato dei campi.

ciao

Marco Porzio

unread,
Apr 19, 2018, 5:21:26 AM4/19/18
to
Direi che ci siamo, sembra funzionare tutto!
Se ho ulteriori problemi ti dico ma spero di aver risolto tutto
grazie 1000
marco

Bruno Campanini

unread,
Apr 19, 2018, 2:44:17 PM4/19/18
to
Marco Porzio has brought this to us :
> Ciao a tutti,
> ho la necessità di mettere i dati di un file txt in un file Excel, nello
> specifico: - Aprire il file txt
> - Andare all'ultima riga
> - leggere i dati e metterli nelle celle
>
> il file txt è così composto:
> Data;Lotto;Fornitore;Valore1;Valore2
> quindi:
> cercare la 1° riga vuota nel foglio Excel
> A1=Data
> B1=Lotto
> C1=Fornitore
> D1=Valore1
> E1=Valore2
>
> oppure, se più comodo, cancello tutto ed importo tutte le righe del file txt

Variante tardiva:
================================================
Public Sub OpenTextFile()
Dim LineItems, i As Long, j As Long, Separator As String
Dim TargetCell As Range, LineFromFile As String

'--- Definizioni -------------------------
Const TextFile As String = "D:\Sample.txt"
Set TargetCell = [Sheet5!B11]
Separator = ","
'-------------------------------------------

Open TextFile For Input As #1
Do Until EOF(1)
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, Separator)
i = i + 1
For j = 1 To UBound(LineItems) + 1
TargetCell(i, j) = LineItems(j - 1)
Next
Loop
Close #1
End Sub
=================================================

Bruno

Marco Porzio

unread,
Apr 20, 2018, 4:32:36 AM4/20/18
to
Grazie!!

Bruno Campanini

unread,
Apr 20, 2018, 5:54:39 AM4/20/18
to
Marco Porzio expressed precisely :

>> Variante tardiva:
>> ================================================
>> Public Sub OpenTextFile()
>> Dim LineItems, i As Long, j As Long, Separator As String
>> Dim TargetCell As Range, LineFromFile As String
>>
>> '--- Definizioni -------------------------
>> Const TextFile As String = "D:\Sample.txt"
>> Set TargetCell = [Sheet5!B11]
>> Separator = ","
>> '-------------------------------------------
>>
>> Open TextFile For Input As #1
>> Do Until EOF(1)
>> Line Input #1, LineFromFile
>> LineItems = Split(LineFromFile, Separator)
>> i = i + 1
>> For j = 1 To UBound(LineItems) + 1
>> TargetCell(i, j) = LineItems(j - 1)
>> Next
>> Loop
>> Close #1
>> End Sub
>> =================================================
>>
>> Bruno
>
> Grazie!!

Ulteriore variante tardiva (la più semplice):
===============================================
Public Sub ImportTextFile_FSO()
Dim FSO As New FileSystemObject, TS As TextStream
Dim LineItems, i As Long, j As Long, TargetCell As Range

'--- Definizioni ------------------------
Const TextFile As String = "D:\Sample.txt"
Const Separator As String = ","
Set TargetCell = [Sheet5!B6]
'------------------------------------------

Set TS = FSO.OpenTextFile(TextFile, ForReading)
While Not TS.AtEndOfStream
LineItems = Split(TS.ReadLine, Separator)
i = i + 1
For j = 1 To UBound(LineItems) + 1
TargetCell(i, j) = LineItems(j - 1)
Next
Wend
End Sub
===================================================

Bruno

Marco Porzio

unread,
Apr 20, 2018, 6:02:34 AM4/20/18
to
Grazie per l'ulteriore codice
buona giornata
Marco
0 new messages