尝试使用名称的变量保存一个新的,尚未命名的工作簿(我使用另一个sub添加)。当我将所有内容放在引号内时,它可以保存(而不是使用变量)。但是这段代码不断地给出了运行时错误' 1004':方法' SaveAs' of object' _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
答案 0 :(得分:3)
有许多事情可能会导致Save
操作出错,但最常见的是当我们尝试自动创建文件名时,并且不会考虑非法字符,成为文件名的一部分。
在您的情况下,由于您使用的是日期值,因此日期格式中存在\
或/
会导致错误。
This列出了保留字符:
<
(小于)>
(大于):
(冒号)"
(双引号)/
(正斜杠)\
(反斜杠)|
(垂直条或竖线)?
(问号)*
(星号)对于您的情况,您可以简单地使用双重替换:
CompanyNameSave = Replace(Replace(CompanyNameSave, "\", "-"), "/", "-")
但是,这并未考虑所有非法/保留字符。编写一个清除文件名字符串的自定义函数可能会有所帮助:
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
参数,则默认使用下划线_
来替换保留字符。
另请注意:这不会考虑该文件是否已存在。