Excel另存为CSV VBA

时间:2017-04-06 11:13:15

标签: excel-vba csv save-as vba excel

我需要保存我正用作CSV文件的工作表副本。我保存名称是日期和用户名称,我已设置变量来获取此信息,但我不断得到运行时错误'1004';应用程序定义的或对象定义的错误消息,它将无法正常工作。

我正在使用的代码是:

my_method_2

任何人都可以指出我正确的方向是什么问题以及如何解决它?

1 个答案:

答案 0 :(得分:0)

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

  

3/12/2019 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