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

Funziona in questo modo in base alla progettazione in VBA. L’implementazione Excel delle routine di esportazione per VBA utilizza sempre le impostazioni internazionali di Windows per determinare come separare gli elementi in un CSV.

In particolare, la routine esamina il campo Separatore elenco per il delimitatore. Ciò significa che è possibile, se lo si desidera, modificare il delimitatore in un punto e virgola modificando l’impostazione Separatore elenco nella configurazione delle impostazioni internazionali.

Se non desideri modificare le impostazioni regionali, puoi invece scrivere la tua macro che produrrà il file nel modo desiderato.

Considera, per un momento, la seguente macro, che produrrà 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 = ";"  'Specify the separator to be used

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             'Number of rows to export is based on the contents             'of column B. If it should be based on a different             'column, change the following line to reflect the             'column desired.

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 = "There were " & Rows & " rows of data written "

sTemp = sTemp & "to this file:" & vbCrLf & sFName     Else         sTemp = "This macro needs to be run on a workbook "

sTemp = sTemp & "stored in the XLSX format."

End If

MsgBox sTemp End Sub

Questa macro apre un file di testo che ha lo stesso nome della cartella di lavoro. Quindi passa attraverso ogni riga e inizia a mettere insieme una stringa del contenuto della cella. (Questo viene inserito nella variabile sTemp.) Ogni cella ha un punto e virgola posto tra di essa, come definito dalla variabile sSep. I valori concatenati di ciascuna riga vengono memorizzati nel file di testo e al termine il file di testo viene chiuso. La routine è molto veloce e, una volta completata, visualizza un messaggio che indica quante righe sono state esportate nel file.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (9243) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia di menu precedente di Excel qui: