另存为使用variables名称会导致错误

尝试保存一个新的,尚未命名的工作簿(我使用另一个子添加)与名称的variables。 当我把所有的引号内的东西保存(不包括variables)。 但是,这段代码不断给出运行时错误'1004':方法'保存'对象'_workbook'失败。

Sub SalvarTabela30() Application.DisplayAlerts = False Dim CompanyNameSave As String Dim VencimentoSave As Date Dim ContractNumberSave As String Dim LastrowForSave As Long LastrowForSave = ActiveSheet.Cells(Rows.Count, "D").End(xlUp).Row CompanyNameSave = Range("A2") VencimentoSave = Range("C" & LastrowForSave) ContractNumberSave = Range("E2") ActiveWorkbook.SaveAs _ Filename:="\\dsapc429pfs.pactual.net\homefolder02$\wellsty\Desktop\" & _ "Projeto - Marina\" & CompanyNameSave & " - " & ContractNumberSave & _ " - Vencimento" & "(" & VencimentoSave & ")", FileFormat:=52 Application.DisplayAlerts = True End Sub 

有很多事情可能会导致Save操作错误,但可能最常见的是当我们尝试自动创build文件名,并且不考虑非法字符,这不能成为文件名的一部分。

在你的情况下,因为你正在使用date值,date格式中出现的\/会导致错误。

这列出了保留的字符:

  • < (小于)
  • > (大于)
  • :冒号)
  • " (双引号)
  • / (正斜杠)
  • \ (反斜杠)
  • | (竖条或pipe道)
  • ? (问号)
  • * (星号)

对于你的情况,你可以简单地使用双replace:

 CompanyNameSave = Replace(Replace(CompanyNameSave, "\", "-"), "/", "-") 

但是,这不包括所有非法/保留字符。 编写一个清除文件名string的自定义函数可能会有帮助:

 Function CleanFileName(name As String, Optional replaceBy As String = "_") Const reservedChars As String = "<>:""""/\|?*" Dim i As Integer Dim ch As String For i = 1 To Len(reservedChars) ch = Mid(reservedChars, i, 1) name = Replace(name, ch, replaceBy) Next CleanFileName = name End Function 

您可以在尝试保存文件之前立即调用此函数,如:

 CompanyNameSave = CleanFileName(CompanyNameSave, "-") 

注意:如果您省略了可选的replaceBy参数,它将默认使用下划线_replace保留字符。

还要注意:这不考虑文件是否已经存在。