VBA自动化修改CSV文件日期格式失败求助
解决CSV文件日期格式批量修改的VBA问题
问题原因
CSV是纯文本格式文件,直接设置单元格NumberFormat只会改变Excel的显示格式,保存为CSV时会还原成原始文本内容。要真正修改文件里的日期格式,必须将日期文本转换为日期值后,再按目标格式重新生成文本。
修正后的VBA代码
Sub BatchModifyCSVDates() Dim srcFolder As String, destFolder As String Dim fileName As String Dim wb As Workbook Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim dateStr As String ' 替换为你的实际源文件夹和目标网络共享路径 srcFolder = "\\Server\Shared\SourceCSV\" destFolder = "\\Server\Shared\ProcessedCSV\" ' 自动创建目标文件夹(如果不存在) If Dir(destFolder, vbDirectory) = "" Then MkDir destFolder End If ' 遍历所有CSV文件 fileName = Dir(srcFolder & "*.csv") Do While fileName <> "" Set wb = Workbooks.Open(Filename:=srcFolder & fileName, Local:=True) Set ws = wb.Sheets(1) lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 处理A、B列日期(假设第一行是表头,从第2行开始) For i = 2 To lastRow ' 处理A列 dateStr = ws.Cells(i, "A").Value If dateStr <> "" Then ws.Cells(i, "A").Value = Format(DateValue(Mid(dateStr, 1, 10)), "DD/MM/YY") End If ' 处理B列 dateStr = ws.Cells(i, "B").Value If dateStr <> "" Then ws.Cells(i, "B").Value = Format(DateValue(Mid(dateStr, 1, 10)), "DD/MM/YY") End If Next i ' 保存到目标路径,强制CSV格式 wb.SaveAs Filename:=destFolder & fileName, FileFormat:=xlCSV, Local:=True wb.Close SaveChanges:=False fileName = Dir() Loop End Sub
关键说明
Local:=True:确保Excel按本地区域规则解析日期,避免因系统设置导致的日期格式识别错误Mid(dateStr, 1, 10):提取原日期字符串中的DD/MM/YYYY部分,忽略后面的时间Format(DateValue(...), "DD/MM/YY"):将提取的日期文本转为日期值,再按目标格式生成文本,确保CSV文件存储的是修改后的格式- 若你的CSV没有表头,将循环起始行改为
i = 1即可
内容的提问来源于stack exchange,提问作者Andrew Smith
相关产品推荐
相关产品推荐

