Specificare un delimitatore quando si salva un file CSV in una macro (Microsoft Excel)
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: