PDA

View Full Version : Excel avanzato: come salvare una colonna in formato txt ?


Ldmx
16-02-2005, 09:26
Come dal titolo: ho una colonna e vorrei salvarla in un normalissimo file .txt, come fare tutto in automatico ? Per ora mi arrangio con il copia e incolla dentro il Notepad, però mi piacerebbe farlo in automatico, tipo con una macro... le colonne sono più di una e diventa noioso farlo a mano... Qualcuno sa aiutarmi ? Io pensavo che excel avendo la possibilità di salvare in formato testo abbia un oggetto che gli consente di creare file txt, quindi con le macro potrebbe essere possibile in teoria ? Inoltre vorrei dare un nome ad ogni file che corrisponda all'intestazione della colonna.

Aiuto !:wtf:

guldo76
16-02-2005, 10:11
ma cosa vuoi fare? salvare ogni colonna in un diverso file di testo?

Ldmx
17-02-2005, 08:49
Esatto, magari prendendo come nome il contenuto della prima riga di ogni colonna...

guldo76
17-02-2005, 11:56
Questa macro mi sembra che funzioni.
Sicuramente si può fare di meglio; non so bene come gestire l'I/O con il basic. Cmq, nonostante la creazione di fogli e cartelle e il relativo stress per la memoria, funziona.
Dimmi se ti ci trovi bene.
E' un po' commentata.

Sub SalvaTxt()

On Error Resume Next

Set inizio = ActiveWorkbook.ActiveSheet ' foglio iniziale con i dati
Set nuovo = ActiveWorkbook.Sheets.Add ' aggiunge un foglio nuovo

i = 1
cella_iniziale = inizio.Cells(1, i) ' intestazione della colonna

While Not (IsEmpty(cella_iniziale) Or IsNull(cella_iniziale)) ' forse basta IsEmpy... boh
' Si ferma la prima volta che trova una colonna con la prima cella vuota

nuovo.Columns(1).Value = inizio.Columns(i).Value
nuovo.Copy ' lo copia in un nuovo workbook

With ActiveWorkbook.ActiveSheet ' lo salva come file di testo
' dopo averti chiesto conferma,
' se il file esiste già
.SaveAs Filename:="C:\" & .Cells(1, 1) & ".txt", _
FileFormat:=xlTextWindows
End With

ActiveWorkbook.Close SaveChanges:=False

i = i + 1
cella_iniziale = inizio.Cells(1, i)

Wend

' la riga successiva toglie gli avvisi;
' per sovrascrivere di default gli eventuali file esistenti,
' spostala all'inizio della routine.
Application.DisplayAlerts = False

nuovo.Delete
Application.DisplayAlerts = True

End Sub

Ldmx
17-02-2005, 16:24
Grazie Guldo76 :D

Il tuo aiuto è stato essenziale, comunque questo è quello che mi serviva:

Sub SalvaTxtNew()

On Error Resume Next
Percorso = "C:\Documents and Settings\Txt\"

Set inizio = ActiveWorkbook.ActiveSheet ' foglio iniziale con i dati
Set nuovo = ActiveWorkbook.Sheets.Add ' aggiunge un foglio nuovo

c = 34

cella_iniziale = inizio.Cells(1, c) ' intestazione della colonna

While Not (IsEmpty(cella_iniziale) Or IsNull(cella_iniziale)) ' forse basta IsEmpy... boh
' Si ferma la prima volta che trova una colonna con la prima cella vuota

nuovo.Columns(1).Value = inizio.Columns(c).Value
nuovo.Rows(1).Delete
nuovo.Copy ' lo copia in un nuovo workbook

With ActiveWorkbook.ActiveSheet ' lo salva come file di testo
' dopo averti chiesto conferma,
' se il file esiste già
.SaveAs Filename:=Percorso & inizio.Cells(1, c) & ".txt", _
FileFormat:=xlTextWindows
End With

ActiveWorkbook.Close SaveChanges:=False

nuovo.Columns(1).Delete

c = c + 1
cella_iniziale = inizio.Cells(1, c)

Wend

' la riga successiva toglie gli avvisi;
' per sovrascrivere di default gli eventuali file esistenti,
' Application.DisplayAlerts = False

nuovo.Delete
Application.DisplayAlerts = True

End Sub