ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用vba代码直接生成各表的CSV文件?

如何用vba代码直接生成各表的CSV文件?

作者:绿色风 分类: 时间:2022-08-17 浏览:97
楼主
kevinchengcw
Q: 如何用vba代码直接生成各表的CSV文件?
A: 实现代码如下:
  1. Sub test()
  2. Dim WS As Worksheet, Arr, N&, I&, Str$
  3. For Each WS In Worksheets  '循环各个工作表
  4.     If WS.[a1] <> "" Or WS.Cells.SpecialCells(xlCellTypeLastCell).Address <> "$A$1" Then  '如果A1不为空或者工作已使用区域最后单元格地址不是A1(判断工作表是否已使用),则
  5.         Arr = WS.Range("a1", WS.Cells.SpecialCells(xlCellTypeLastCell)).Value  '提取A1到工作表使用区最后单元格区域的数值到数组中
  6.         Str = ""  '初始化结果字串为空
  7.         For N = LBound(Arr) To UBound(Arr)  '循环数组各行
  8.             For I = LBound(Arr, 2) To UBound(Arr, 2)  '循环数组各列
  9.                 Str = Str & """" & Replace(Arr(N, I), """", """""") & """" & IIf(I = UBound(Arr, 2), vbCrLf, ",")  '将当前循环到的数组项内容中的单个双引号替换为两个双引号,并在字符串两端加上引号,根据位置分别用逗号或回车换行符串接到结果字串后
  10.             Next I
  11.         Next N
  12.         Open ThisWorkbook.Path & "\" & Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & "-" & WS.Name & ".csv" For Output As #1  '创建或打开当前工作簿路径下,以工作簿名-工作表名格式命名的CSV文件来写入文本
  13.             Print #1, Str  '将结果字符串写入
  14.         Close #1  '关闭文件
  15.     End If
  16. Next WS  '循环到下一工作表
  17. End Sub
以上方法可以通过具体操作,控制结果内容,实现想要的效果。

详见附件及素材源帖。

VBA直接生成CSV文件.rar
2楼
xyf2210
跟帖学习
3楼
xiaoxiao029
你好。
为什么手动新建一个csv 文件和用vba代码自动新建一个csv文件保存同样的内容会不同?
用UltraEdit-32 打开csv 文件时发现,手动创建的csv文件的内容会以逗号做分隔符把每列数据分开,但用代码创建的csv文件保存的内容不是用分割符而是用空格分开 ?
例如:
name,code,type                                             name      code    type   
xx,001,002                                                    xx           001      002
ss,001,003                                                     ss            001      002
.......

创建csv文件的代码如下:
  1. Dim a As Workbook
  2.      Workbooks(converfilename).Activate
  3.      t = ActiveWorkbook.Path
  4.     Set a = Workbooks.Add
  5.     a.SaveAs t & "\a4.csv", xlCSV
  6.     Workbooks("a4.csv").Close True
复制代码内容代码如下:
  1. Workbooks(converfilename).Sheets(3).Activate
  2.          snum = ActiveWorkbook.Sheets(3).Range("B65535").End(xlUp).Row
  3.         
  4.          ActiveWorkbook.Sheets(3).Range("A1:H" & snum).Copy
  5.           Workbooks(csvstr).Activate
  6.           olen = ActiveWorkbook.Sheets(1).UsedRange.Rows.Count + 1
  7.          
  8.           ActiveWorkbook.Sheets(1).Range("A1:H" & snum).Select
  9.         Selection.PasteSpecial Paste:=xlPasteValues
  10.         ActiveWorkbook.Sheets(1).Range("G2:G" & snum).Select
  11.    Selection.NumberFormatLocal = "##############0.##############"
有谁遇到这种情况吗?要怎么解决阿?
4楼
老糊涂
跟帖学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap