另存为使用变量名会出错

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参数,将默认使用下划线_替换保留字符。

另请注意:这没有考虑文件是否已经存在。