Come specificare un delimitatore durante il salvataggio di un file CSV in una macro

Quando si utilizzano gli strumenti disponibili sulla barra multifunzione per esportare un foglio di lavoro, come file CSV, Arianna ha notato che può specificare che desidera utilizzare una virgola (,) come delimitatore di campo. Tuttavia, se salva un file CSV utilizzando una macro (FileFormat:=xlCSV o xlCSVWindows), non potrà specificare una virgola come delimitatore.

Funziona in questo modo in base alla progettazione di VBA. L’implementazione Excel delle routine di esportazione per VBA utilizza sempre le impostazioni regionali di Windows per determinare come separare gli elementi in un CSV. Nello specifico, la routine esamina il campo Separatore di elenco. Ciò significa che puoi, se lo desideri, modificare il delimitatore in una virgola modificando l’impostazione Separatore di elenco nella configurazione delle impostazioni regionali. Cercando “Area geografica” su Windows e cliccando in basso a destra sul pulsante “Impostazioni aggiuntive” della finestra omonima, si accede ad una nuova finestra denominata “Personalizza formato“.

 

Come specificare un delimitatore durante il salvataggio di un file CSV in una macro 1

Se non desideri modificare le impostazioni regionali, puoi invece scrivere la tua macro che genererà il file nel modo desiderato. Considera, per un momento, la seguente macro, che genererà il file:

 

Sub CreateFile()
    Dim sFName As String
    Dim Rows As Long
    Dim Cols As Long
    Dim J As Long
    Dim K As Long
    Dim sTemp As String
    Dim sSep As String
    sSep = ","  'Specifica il separatore da utilizzare
    sFName = ActiveWorkbook.FullName
    If Right(sFName, 5) = ".xlsx" Then
        sFName = Mid(sFName, 1, Len(sFName) - 5)
        sFName = sFName & ".txt"
        Open sFName For Output As 1
        With ActiveSheet
            'Il numero di righe da esportare dipende dal contenuto
            'della colonna B. Se dovesse basarsi su una diversa
            'colonna, modifica la riga seguente per riflettere la
            'colonna desiderata.
            Rows = .Cells(.Rows.Count, "B").End(xlUp).Row
            For J = 1 To Rows
                sTemp = ""
                Cols = .Cells(J, .Columns.Count).End(xlToLeft).Column
                For K = 2 To Cols
                    sTemp = sTemp & .Cells(J, K).Value
                    If K < Cols Then sTemp = sTemp & sSep
                Next
                Print #1, sTemp
            Next J
        End With
        Close 1
        sTemp = "Ci sono " & Rows & " righe di dati esportate "
        sTemp = sTemp & "su questo file:" & vbCrLf & sFName
    Else
        sTemp = "Questa macro deve essere eseguita su una cartella di lavoro "
        sTemp = sTemp & "salvata in formato XLSX."
    End If
    MsgBox sTemp
End Sub

 

 

Questa macro apre un file di testo con lo stesso nome della cartella di lavoro. Quindi esamina ciascuna riga e inizia a mettere insieme una stringa del contenuto della cella (questa viene inserita nella variabile sTemp). Ogni cella ha una virgola inserita al suo interno, come definito dalla variabile sSep. I valori concatenati di ogni riga vengono archiviati nel file di testo e al termine il file di testo viene chiuso. La routine è molto veloce e al termine visualizza un messaggio che indica quante righe sono state esportate nel file.

 

 

Tags: , , , , , , , , , , , , , , , , , , , , , ,

Ti è stato utile?