我在尝试保存到 Sharepoint 时遇到此代码错误。代码较长,但包括相关部分。
Dim fso As Object
Dim template As Workbook
Dim TempPath As String 'path is set with folder picker
Set fso = CreateObject("Scripting.FileSystemObject")
currentname = fso.GetBaseName(ThisWorkbook.Name)
Set template = Workbooks.Open(TempPath)
DoEvents
If InStr(ThisWorkbook.Path, "/") > 0 Then 'check if it's saving to Sharepoint
urlpath = Replace(ThisWorkbook.Path, " ", "%20")
urlname = Replace(currentname, " ", "%20")
Savename = urlpath & "/" & urlname & "_New" & ".xlsm"
Else
Savename = ThisWorkbook.Path & "\" & currentname & "_New" & ".xlsm"
End If
currentformat = template.FileFormat
template.SaveAs Filename:=Savename, FileFormat:=currentformat
当“ThisWorkbook”位于系统文件库中时,代码可以工作,但当文件位于 Sharepoint 中时,代码会出错。我录制了一个“保存”宏,系统将文件名显示为(示例)https://“companyname.sharepoint.com/sites/team_data/Shared%20Documents/folder%20location” 如果我专门用该地址指定 Savename,它就可以工作。因此,问题似乎在于使用工作簿路径和名称的串联。如果我在消息框中显示串联名称,它看起来与直接路径完全相同。我无法弄清楚串联有什么问题。 sharepoint 的 workbook.path 返回时带有空格而不是 %20。我添加了“替换”代码来添加 %20 以匹配保存宏的显示方式。
这对我来说没问题:
Sub SPTester()
Dim fso As Object
Dim template As Workbook, newname, Savename
Set fso = CreateObject("Scripting.FileSystemObject")
newname = fso.GetBaseName(ThisWorkbook.Name) & "_New.xlsm"
Set template = Workbooks.Open("https://contoso.sharepoint.com/sites/Site1/TestLibrary/test2.xlsm")
DoEvents
Savename = ThisWorkbook.Path & "/" & newname 'windows won't complain about "/"
Debug.Print "saving as..." & vbLf & Savename
template.SaveAs Filename:=Savename, FileFormat:=template.FileFormat
End Sub