将工作表的副本另存为 CSV,并在保存名称中包含日期

Posted

技术标签:

【中文标题】将工作表的副本另存为 CSV,并在保存名称中包含日期【英文标题】:Save copy of worksheet as CSV with date in the save name 【发布时间】:2017-04-06 11:13:14 【问题描述】:

我需要将我正在使用的工作表的副本保存为 CSV 文件。

保存名称是日期和用户名。我设置了变量来获取这些信息。

我明白了

运行时错误“1004”;应用程序定义或对象定义的错误

上线

Activeworkbook.saveAs Filename

代码是:

Sub SaveCSV()
rundate = DateTime.Now
runname = Application.UserName
savename = rundate & runname
sfilename = ActiveWorkbook.Path & "\" & savename & ".csv"

ActiveWorkbook.Save

ActiveWorkbook.SaveAs Filename:=sfilename, FileFormat:=xlCSV
Application.DisplayAlerts = True
End Sub

【问题讨论】:

您是否尝试过单步执行代码来检查变量的值?哪一行错误? 逐步完成所有这些,变量值对我来说似乎很好,错误就在线:Activeworkbook.saveAs Filename.... sfilename的值是多少? "C:\MACRO\06/04/2017 12:18:32Thomas Smith.csv" 我现在在想日期中的 / 导致了问题? 不要认为你被允许/ - 尝试重新格式化日期或替换为其他内容。 【参考方案1】:

rundate 的值(基于默认区域设置)将类似于以下内容:

2019 年 3 月 12 日 10:25:11

根据 Windows 中的文件名约定,其中正斜杠 (/) 和冒号 (:) 是非法字符。

要解决此特定问题,请使用以下代码将当前时间分配给 rundate 变量:

rundate = Format(DateTime.Now, "dd-MMM-YYYY_hh-mm-ss_")

另一个好方法是使用泛型函数,因为我们并不总是知道是什么非法字符造成了麻烦。因为文件名中可能有更多非法字符。上述方法是正确的,但它不是在保存之前从文件名中删除或替换的非法字符的完整列表。例如。您的代码中的数组中缺少这些字符 -> : & 。但是,建议文件名也不要包含其他允许的特殊字符。

下面,我提供了一个函数,它返回一个安全的字符串,可用于在保存之前生成文件名。

Function ReplaceIllegalCharacters(strIn As String, strChar As String) As String
    Dim strSpecialChars As String
    Dim i As Long
    strSpecialChars = "~""#%&*:<>?|/\[]" & Chr(10) & Chr(13)

    For i = 1 To Len(strSpecialChars)
        strIn = Replace(strIn , Mid$(strSpecialChars, i, 1), strChar)
    Next

    ReplaceIllegalCharacters = strIn 
End Function

具体来说,在您的代码中,将 ActiveWorkbook.SaveAs 行替换为以下行:

ActiveWorkbook.SaveAs Filename:= ReplaceIllegalCharacters(sfilename, "_") & _
, FileFormat:=xlCSV, CreateBackup:=False

【讨论】:

以上是关于将工作表的副本另存为 CSV,并在保存名称中包含日期的主要内容,如果未能解决你的问题,请参考以下文章

PySpark:将临时视图转换为表格并在本地驱动器中另存为 .CSV

在 Excel for Mac 2016 中另存为 CSV

如何在“另存为”对话框中将工作表的默认保存格式从 .xml 更改为 .xls?

excel另存为csv时,身份证号后4位全部变成0了, 怎么解决

关于excel另存为csv文件数字的问题?

将数据库另存为 CSV 文件