使用菜单导出工作表创建CSV文件时,Arkadiusz指出,他可以指定他要使用分号(;)

作为字段定界符。但是,如果他使用宏(FileFormat:= xlCSV或xlCSVWindows)保存CSV文件,则他不能指定分号作为分隔符。

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

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

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

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

Sub CreateFile()

FName = ActiveWorkbook.Name     If Right(FName, 4) = ".xls" Then         FName = Mid(FName, 1, Len(FName) - 4)

End If

Columns(1).Insert Shift:=xlToRight

For i = 1 To Range("B65000").End(xlUp).Row         TempString = ""

For j = 2 To Range("HA1").End(xlToLeft).Column             If j <> Range("HA1").End(xlToLeft).Column Then                 TempString = TempString & _                   Cells(i, j).Value & ";"

Else                 TempString = TempString & _                   Cells(i, j).Value             End If         Next         Cells(i, 1).Value = TempString     Next

Columns(1).Select     Selection.Copy     Workbooks.Add     Range("A1").Select     ActiveSheet.Paste     Application.CutCopyMode = False

ActiveWorkbook.SaveAs Filename:=FName & ".txt", _       FileFormat:=xlPrinter End Sub

该宏采用独特的方法来创建输出文件。它的作用是在工作表的左侧插入一列,然后将该列右侧的所有数据连接到新插入的列A中。它在每个字段之间添加分号。完成后,它将获取放入A列的信息,并将其写入新的工作簿中。然后,使用xlPrinter文件格式将该工作簿保存到磁盘,这意味着它可以“按原样”输出,而无需进行任何修改。

如果您希望采用更直接的方法,直接将信息写入文件而无需更改工作表,请查看此博客文章中的宏:

https://web.archive.org/web/20060302021412/http:/www.dicks-blog.com:80/archives/2004/11/09/roll-your-own-csv/

该宏在每个字段之间使用逗号,但是可以轻松对其进行修改,以便改为使用分号。

注意:

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

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

本技巧(3232)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: