Importare file txt



  • Importare file txt
    di Daniele (utente non iscritto) data: 07/01/2010

    Ciao,
    prima di tutto grazie a tutti per il tempo che dedicate a questo forum!!
    il mio problema consiste in questo:
    vorrei creare una macro per importare su excel un file txt che ha una sola colonna ed un numero impressionante di righe. questo file è del tipo:

    1
    2
    3
    4
    k
    5
    6
    7
    8
    k
    etc...

    io vorrei che ogni volta che la macro legga la lettera "k" cambi colonna in modo che da fare un file excel del tipo

    1 5
    2 6
    3 7
    4 8
    k k

    io per ora sono riuscito a fare una macro che mi importi il file e me lo scriva nella cella che voglio io (vedi macro allegata)...purtroppo sono un po alle prime armi e vi chiedo aiutoo!!!

    vi ringrazio in anticipo
    daniele.
     
    Sub Impfiletxt()
    
    FileDaAprire = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If FileDaAprire = False Then Exit Sub
    Dove = InputBox("SCRIVI L'INDIRIZZO DELLA CELLA DA DOVE INIZIARE A IMPORTARE")
    If Dove = "" Then Exit Sub
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileDaAprire & "", Destination:=Range(Dove))
    .Refresh BackgroundQuery:=False
    End With
    End Sub
    


  • Importare file txt
    di Daniele (utente non iscritto) data: 07/01/2010

    Ciao,
    prima di tutto grazie a tutti per il tempo che dedicate a questo forum!!
    il mio problema consiste in questo:
    vorrei creare una macro per importare su excel un file txt che ha una sola colonna ed un numero impressionante di righe. questo file è del tipo:

    1
    2
    3
    4
    k
    5
    6
    7
    8
    k
    etc...

    io vorrei che ogni volta che la macro legga la lettera "k" cambi colonna in modo che da fare un file excel del tipo

    1 5
    2 6
    3 7
    4 8
    k k

    io per ora sono riuscito a fare una macro che mi importi il file e me lo scriva nella cella che voglio io (vedi macro allegata)...purtroppo sono un po alle prime armi e vi chiedo aiutoo!!!

    vi ringrazio in anticipo
    daniele.
     
    Sub Impfiletxt()
    
    FileDaAprire = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If FileDaAprire = False Then Exit Sub
    Dove = InputBox("SCRIVI L'INDIRIZZO DELLA CELLA DA DOVE INIZIARE A IMPORTARE")
    If Dove = "" Then Exit Sub
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileDaAprire & "", Destination:=Range(Dove))
    .Refresh BackgroundQuery:=False
    End With
    End Sub
    



  • di Enzo (utente non iscritto) data: 08/01/2010

    Prendendo spunto dal tuo esempio prova questa istruzione
    funziona sulla base che i tuoi dati abbiano come chiusura la lettera "k" poi la puoi adattare come vuoi
    fa sapere se va bene
     
    FileDaAprire = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If FileDaAprire = False Then Exit Sub
    dove = InputBox("SCRIVI L'INDIRIZZO DELLA CELLA DA DOVE INIZIARE A IMPORTARE")
    If dove = "" Then Exit Sub
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileDaAprire & "", Destination:=Range(dove))
    .Refresh BackgroundQuery:=False
    End With
    ''''''''''''''''
    Application.ScreenUpdating = False
    Range(dove).Select
    Selection.End(xlDown).Select
    ActiveCell.FormulaR1C1 = "=ADDRESS(ROW(), COLUMN(), 4)"
    FINE = ActiveCell.Value
    ActiveCell.Value = ""
    conta = Application.WorksheetFunction.CountIf(Range(dove & ":" & FINE), "k")
    For i = 1 To conta
    Range(dove).Select
    If ActiveCell.Value = "" Then
    Do
    ActiveCell.Offset(1).Select
    Loop Until ActiveCell.Value <> ""
    End If
    x = ActiveCell.Address
    Do
    ActiveCell.Offset(1).Select
    Loop Until ActiveCell.Value = "k"
    Y = ActiveCell.Address
    Range(x & ":" & Y).Select
    Selection.Cut
    Range(dove).Select
    Do
    ActiveCell.Offset(0, 1).Select
    Loop Until ActiveCell.Value = ""
    ActiveSheet.Paste
    Next i
    Range(dove & ":" & FINE).Select
    Selection.Delete Shift:=xlToLeft
    Application.ScreenUpdating = True
    Range(dove).Select
    



  • di Daniele (utente non iscritto) data: 08/01/2010

    Ciao,
    premetto che sei stato gentilissimo!!
    ho provato il programma ma purtroppo mi da un errore nella riga che ho segnalato giù nel programma!! per il poco che so fare provo a dargli uno sguardo anche io!!!grazie ancora.
    ps. il programma mi serve perchè le righe sono tantissime (più di quelle disponibili su escel), per questo motivo mi serve metterle su piu colonne!

    ancora grazie mille... ciao.
     
    Sub Impfiletxt()
    
    FileDaAprire = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If FileDaAprire = False Then Exit Sub
    dove = InputBox("SCRIVI L'INDIRIZZO DELLA CELLA DA DOVE INIZIARE A IMPORTARE")
    If dove = "" Then Exit Sub
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileDaAprire & "", Destination:=Range(dove))
    .Refresh BackgroundQuery:=False
    End With
    
    Application.ScreenUpdating = False
    Range(dove).Select
    Selection.End(xlDown).Select
    ActiveCell.FormulaR1C1 = "=ADDRESS(ROW(), COLUMN(), 4)"
    FINE = ActiveCell.Value
    ActiveCell.Value = ""
    conta = Application.WorksheetFunction.CountIf(Range(dove & ":" & FINE), "k")
    For i = 1 To conta
    Range(dove).Select
    If ActiveCell.Value = "" Then
    Do
    ActiveCell.Offset(1).Select
    Loop Until ActiveCell.Value <> ""
    End If
    x = ActiveCell.Address
    Do
    ActiveCell.Offset(1).Select               '<<<<<<<<< ERRORE
    Loop Until ActiveCell.Value = "k"
    Y = ActiveCell.Address
    Range(x & ":" & Y).Select
    Selection.Cut
    Range(dove).Select
    Do
    ActiveCell.Offset(0, 1).Select
    Loop Until ActiveCell.Value = ""
    ActiveSheet.Paste
    Next i
    Range(dove & ":" & FINE).Select
    Selection.Delete Shift:=xlToLeft
    Application.ScreenUpdating = True
    Range(dove).Select
    
    End Sub



  • di Enzo (utente non iscritto) data: 08/01/2010

    L'errore che mi hai segnalato ossia indica, traducendo quella riga
    scendi di cella fino a quando non incontri il valore k
    che era quello che mi avevi indicato nell'esempio
    quindi lui non si ferma e non continua con l'istruzione successiva fino a quando non trova k
    per quello ti avevo detto che devi adattarlo ai valori effettivi che vuoi analizzare nel file txt
    ciao
    ps se giri un file di esempio si puo' vedere cosa si puo' fare



  • di Daniele (utente non iscritto) data: 08/01/2010

    Trovato!! era una stupidagine!!!!
    il programma riconosce le minuscole dalle maiuscole!!! k era minuscolo nel programma e maiuscolo nel file txt!!!
    speriamo che ora nell'importazione non mi tagli cmq le righe oltre 65536!!!!
    ciao e grazie infinite!!!!



  • di Daniele (utente non iscritto) data: 08/01/2010

    Trovato!! era una stupidagine!!!!
    il programma riconosce le minuscole dalle maiuscole!!! k era minuscolo nel programma e maiuscolo nel file txt!!!
    speriamo che ora nell'importazione non mi tagli cmq le righe oltre 65536!!!!
    ciao e grazie infinite!!!!



  • di Daniele (utente non iscritto) data: 08/01/2010

    Ora sto provando a personalizzarlo tipo far apparire una finestra con scrivere quello che voglio io come saparatore!!!
    un file che ho io è fatto cosi:

    4291
    n4haic400op
    15-dec-2009 14:30:00
    120.00 (sec)
    14.6177
    14.7053
    14.8003
    15.0512
    15.0233
    14.8052
    15.1027
    4291
    n4hat400pv
    15-dec-2009 14:30:00
    120.00 (sec)
    5.72445
    5.48432
    5.28737
    5.08662

    dovrebbe cambiar riga ogni volta che trova 4291..
    cmq ho provato è sembra funzionare!!
    ora cercherò di personalizzarlo!!
    ti ringrazio!!!




  • di Daniele (utente non iscritto) data: 08/01/2010

    Altro problemino :)
    il programma come te l'ho chiesto funziona benissimo... l'unica cosa è che la sequenza di dati alcune volte presenta degli spazi e ho notato che quando il programma trova spazio vuoto non fa la formattazione!!
    pensi sia facile raggirare il problema?
    i dati effettivamente sono del tipo:

    k
    1
    2
    3
    4
    5
    k
    6
    7
    8
    9
    k
    etc....

    daniele.



  • di Daniele (utente non iscritto) data: 08/01/2010

    Ps. nel post che ti ho mandato non ha messo gli spazi
    rilinko l'esempio:

    -k
    1
    -2
    3
    4
    --5
    -k
    6
    --7
    -8
    --9
    ---k

    i trattini rappresentano gli spazi!!



  • di Enzo (utente non iscritto) data: 11/01/2010

    Ti ho inserito nel'istruzione qui sotto un blocco compreso tra ''''''''''''''' che dovresti inserire nell'istruzione che hai modificato
    provala e fa sapere se va bene

     
    FileDaAprire = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If FileDaAprire = False Then Exit Sub
    dove = InputBox("SCRIVI L'INDIRIZZO DELLA CELLA DA DOVE INIZIARE A IMPORTARE")
    If dove = "" Then Exit Sub
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileDaAprire & "", Destination:=Range(dove))
    .Refresh BackgroundQuery:=False
    End With
    Application.ScreenUpdating = False
    Range(dove).Select
    Selection.End(xlDown).Select
    ActiveCell.FormulaR1C1 = "=ADDRESS(ROW(), COLUMN(), 4)"
    FINE = ActiveCell.Value
    ActiveCell.Value = ""
    ''''''''''''''''''''''''''''''''''''''''
    Range(dove).Select
    valore = Trim(ActiveCell.Value)
    ActiveCell.Value = valore
    Do
    ActiveCell.Offset(1).Select
    valore = Trim(ActiveCell.Value)
    ActiveCell.Value = valore
    Loop Until ActiveCell.Value = ""
    ''''''''''''''''''''''''''''''''''''''''
    conta = Application.WorksheetFunction.CountIf(Range(dove & ":" & FINE), "k")
    For i = 1 To conta
    Range(dove).Select
    If ActiveCell.Value = "" Then
    Do
    ActiveCell.Offset(1).Select
    Loop Until ActiveCell.Value <> ""
    End If
    x = ActiveCell.Address
    Do
    ActiveCell.Offset(1).Select
    Loop Until ActiveCell.Value = "k"
    Y = ActiveCell.Address
    Range(x & ":" & Y).Select
    Selection.Cut
    Range(dove).Select
    Do
    ActiveCell.Offset(0, 1).Select
    Loop Until ActiveCell.Value = ""
    ActiveSheet.Paste
    Next i
    Range(dove & ":" & FINE).Select
    Selection.Delete Shift:=xlToLeft
    Application.ScreenUpdating = True
    Range(dove).Select