当使用功能区中可用的工具将工作表导出为CSV文件时,Arkadiusz指出,他可以指定他想使用分号(;)作为字段定界符。但是,如果他使用宏(FileFormat:= xlCSV或xlCSVWindows)保存CSV文件,则他不能指定分号作为分隔符。

在VBA中,这是设计使然的。 VBA导出例程的Excel实现始终使用Windows区域设置来确定应如何分隔CSV中的项目。

具体地说,例程在列表分隔符字段中查找定界符。这意味着,如果需要,可以通过更改区域设置配置中的“列表分隔符”设置将定界符更改为分号。

如果您不想更改区域设置,则可以编写自己的宏,该宏将以您希望的任何方式输出文件。

考虑一下下面的宏,它将输出文件:

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

此宏将打开一个与您的工作簿同名的文本文件。然后,它逐步浏览每一行,并开始将一串单元格内容放在一起。 (将其放入sTemp变量中。)每个单元格之间都有一个分号,如sSep变量所定义。每行的串联值存储在文本文件中,完成后将关闭文本文件。该例程非常快速,完成后会显示一条消息,指示已将多少行导出到文件。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9243)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处找到适用于Excel的较旧菜单界面的本技巧的版本: