对象“_Workbook”的方法“SaveAs”失败

Posted

技术标签:

【中文标题】对象“_Workbook”的方法“SaveAs”失败【英文标题】:Method 'SaveAs' of object '_Workbook' failed 【发布时间】:2020-09-09 15:23:08 【问题描述】:

我有一个宏打开下载文件夹中的一组 Excel 文件,将数据格式化为表格,然后将它们保存到 Sharepoint 上的在线位置。今天,出乎意料的是,宏停止工作(经过大约一个月的无问题使用后),在 Call wb.SaveAs... 行出现错误,错误消息是 Run-time error '1004': Method 'SaveAs' of object '_Workbook' failed。我绝对无法找出导致错误的原因:

wb 变量填充了正确的工作簿引用 目标网址有效且存在 名称不包含任何无效字符 我可以访问有问题的 URL(实际上宏位于存储在同一位置的文件中) 该位置没有同名文件 当我 debug.print 文件名参数并手动保存在该位置/名称时,它可以工作

Stack 上有十亿个关于此错误的问题,但其中大多数似乎与 ActiveSheet 对象的问题有关,但我有一个具体的硬参考,因此提供的解决方案并不真正适用。

  Sub DataPrep()
    
    Dim wbTgt As Workbook: Set wbTgt = ThisWorkbook
    Dim wb As Workbook
    Dim sSrcPath As String: sSrcPath = Environ("UserProfile") & "\Downloads\"
    Dim sTgtPath As String: sTgtPath = "https://evilcorpportal.sharepoint.com/sites/folder1/folder2/folder3/folder4/folder5/"
    Dim sDate As String: sDate = Year(Date) & "-" & Format(Month(Date), "00") & "-" & Format(Day(Date), "00")
    Dim sWBs() As String: sWBs = Split("Rep1 " & sDate & ";Rep2 " & sDate & ";Rep3 " & sDate & ";Report4", ";")
    Dim sWBLocs() As String: sWBLocs = GetFileLocations(sSrcPath, sWBs)
    Dim sTblName As String
    
    Dim i As Integer
    
    For i = LBound(sWBLocs) To UBound(sWBLocs)
        Set wb = Workbooks.Open(sWBLocs(i))
        sTblName = Split(wb.Name, ".")(0)
        
        If InStr(sTblName, " ") > 0 Then sTblName = Left(sTblName, InStr(sTblName, " ") - 1)
        
        Call CreateTable(wb, sTblName)
        Call wb.SaveAs(Filename:=sTgtPath & sTblName & ".xlsx", FileFormat:=51)
        wb.Close
    Next i

  End Sub

【问题讨论】:

CreateTable 会发生什么?如果您在SaveAs 行上设置断点并稍等片刻再继续执行会怎样? @TimWilliams 工作表中的数据被格式化为表格并命名(成功执行)。等待SaveAs 没有区别。 【参考方案1】:

所以问题不在代码中,而是在 Sharepoint 的某个地方。当我尝试手动执行此步骤时,它仅在大约 25% 的情况下有效(当我在提出问题之前对其进行测试时,我很幸运),否则它在上传中失败(无论是在保存到在线位置期间,还是在保存离线并手动上传)。我认为在宏执行期间也发生了同样的事情并导致它失败。

【讨论】:

以上是关于对象“_Workbook”的方法“SaveAs”失败的主要内容,如果未能解决你的问题,请参考以下文章

运行时错误“1004”:对象“_Workbook”的方法“SaveAs”失败

使用 VBA 密码保护进行保存时出现错误消息“运行时错误‘1004’:对象‘_Workbook’的方法‘SaveAs’失败”

当目录中存在同名文件时,“对象_workbook的方法保存失败”

另存为失败的 Excel VBA

尝试在映射服务器上将 XLSM 保存为 CSV 时出现“对象 _workbook 的方法保存失败”错误

在 IE 中为 SaveAs 对话框进行特征/对象检测的可靠 Javascript 方法