VBA: Da Excel a file di testo

13 Novembre 2018 di In: Sistemistico
Questa macro permette di esportare la selezione di un worksheet Excel in un file di testo. Permette di stabilire il separatore tra campi. E’ stato creato in Microsoft Excel 2016.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Sub XLtoTXT()
'
' XLtoTXT Macro
'
Dim SeparatoreCampi ' Definisce i caratteri separatori tra un campo e l'altro
Dim Arr(500) As Integer ' Conterrà i valori di massima lunghezza per colonna
Dim myFile As String ' Contiene il percorso del file di output
Dim rng As Range 'Conterra il range di celle da esportare
Dim cellValue As Variant 'Conterrà i valori delle celle esportate
Dim celllung As Integer 'Conterrà la lunghezza massima delle celle (per ogni colonna)
Dim i As Integer ' Indice di riga
Dim j As Integer ' Indice di colonna
Dim Spazi As Integer 'Numero di spazi da aggiungere
Set rng = Selection ' Carica le celle della selezione
 
'
' Da personalizzare
'
SeparatoreCampi = " | "
myFile = ActiveWorkbook.Path & "\output.txt" ' stessa directory del file che invoca la macro
 
 
' Cicla il range per colonne e righe per capire la laghezza massima della colonna e la salva in Arr
For j = 1 To rng.Columns.Count
For i = 1 To rng.Rows.Count
    If Len(rng.Cells(i, j).Value) > celllung Then
    celllung = Len(rng.Cells(i, j).Value)
    Arr(j) = celllung
    End If
 
Next i
celllung = 0 ' Azzero la variabile perché passo alla colonna successiva
Next j
 
 
Open myFile For Output As #1 'Apre il file
 
' Cicla il range per riga e colonna aggiungendo gli spazi mancanti
For i = 1 To rng.Rows.Count
    For j = 1 To rng.Columns.Count
    Spazi = Arr(j) - Len(rng.Cells(i, j).Value)
    cellValue = rng.Cells(i, j).Value
If j = rng.Columns.Count Then ' Se il valore è ultmo nella riga
    Print #1, cellValue & Space(Spazi)
Else
    Print #1, cellValue & Space(Spazi) & SeparatoreCampi;
End If
    Next j
Next i
 
Close #1 'Chiude il file
 
End Sub

Nessun commento presente