另存为使用变量名会出错
Save As Using Variable Names Gives Error
正在尝试保存一个新的、尚未命名的工作簿(我使用另一个子程序添加的),其中包含名称变量。当我将所有内容放在引号内时,它可以保存(而不是变量)。但是这段代码不断给出 运行-time errror '1004': Method'SaveAs'of object '_workbook' failed.
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
操作出错,但最常见的可能是当我们尝试自动创建文件名时,不考虑非法字符,这可能'不是文件名的一部分。
在您的情况下,由于您使用的是日期值,因此日期格式中存在 \
或 /
会导致错误。
This 列出保留字符:
<
(小于)
>
(大于)
:
(冒号)
"
(双引号)
/
(正斜杠)
\
(反斜杠)
|
(竖条或管道)
?
(问号)
*
(星号)
对于您的情况,您可以简单地使用双重替换:
CompanyNameSave = Replace(Replace(CompanyNameSave, "\", "-"), "/", "-")
但是,这并不能说明所有 illegal/reserved 个字符。编写一个清除文件名字符串的自定义函数可能会有所帮助:
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
参数,将默认使用下划线_
替换保留字符。
另请注意:这没有考虑文件是否已经存在。
正在尝试保存一个新的、尚未命名的工作簿(我使用另一个子程序添加的),其中包含名称变量。当我将所有内容放在引号内时,它可以保存(而不是变量)。但是这段代码不断给出 运行-time errror '1004': Method'SaveAs'of object '_workbook' failed.
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
操作出错,但最常见的可能是当我们尝试自动创建文件名时,不考虑非法字符,这可能'不是文件名的一部分。
在您的情况下,由于您使用的是日期值,因此日期格式中存在 \
或 /
会导致错误。
This 列出保留字符:
<
(小于)>
(大于):
(冒号)"
(双引号)/
(正斜杠)\
(反斜杠)|
(竖条或管道)?
(问号)*
(星号)
对于您的情况,您可以简单地使用双重替换:
CompanyNameSave = Replace(Replace(CompanyNameSave, "\", "-"), "/", "-")
但是,这并不能说明所有 illegal/reserved 个字符。编写一个清除文件名字符串的自定义函数可能会有所帮助:
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
参数,将默认使用下划线_
替换保留字符。
另请注意:这没有考虑文件是否已经存在。