对象“_Workbook”的方法 'SaveAs' 失败
Method 'SaveAs' of object '_Workbook' failed
我有一个宏打开下载文件夹中的一组 Excel 文件,将数据格式化为 table,然后将它们保存到 Sharepoint 上的在线位置。今天,宏突然停止工作(经过大约一个月的无问题使用),在调用 wb.SaveAs...
行上给出错误消息是 Run-time error '1004': Method 'SaveAs' of object '_Workbook' failed
。我完全找不到导致错误的原因:
wb
变量填充了正确的工作簿参考
- 目标URL有效且存在
- 该名称不包含任何无效字符
- 我可以访问有问题的 URL(实际上宏在存储在同一位置的文件中)
- 该位置没有同名文件
- 当我
debug.print
文件名参数并手动保存 location/name 时它有效
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
所以问题不在代码中,而是在 Sharepoint 的某个地方。当我尝试手动执行此步骤时,它仅在大约 25% 的情况下有效(当我在提出问题之前对其进行测试时,我很幸运),否则它在上传过程中失败(无论是在保存到在线位置时,还是在保存离线和手动上传)。我认为在宏执行期间发生了同样的事情并使其失败。
我有一个宏打开下载文件夹中的一组 Excel 文件,将数据格式化为 table,然后将它们保存到 Sharepoint 上的在线位置。今天,宏突然停止工作(经过大约一个月的无问题使用),在调用 wb.SaveAs...
行上给出错误消息是 Run-time error '1004': Method 'SaveAs' of object '_Workbook' failed
。我完全找不到导致错误的原因:
wb
变量填充了正确的工作簿参考- 目标URL有效且存在
- 该名称不包含任何无效字符
- 我可以访问有问题的 URL(实际上宏在存储在同一位置的文件中)
- 该位置没有同名文件
- 当我
debug.print
文件名参数并手动保存 location/name 时它有效
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
所以问题不在代码中,而是在 Sharepoint 的某个地方。当我尝试手动执行此步骤时,它仅在大约 25% 的情况下有效(当我在提出问题之前对其进行测试时,我很幸运),否则它在上传过程中失败(无论是在保存到在线位置时,还是在保存离线和手动上传)。我认为在宏执行期间发生了同样的事情并使其失败。