另存为使用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保留字符。
还要注意:这不考虑文件是否已经存在。