对象“_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的方法保存失败”