有人能告诉我找不到路径是什么问题吗?当我执行脚本时,总是在同一个位置显示错误消息(运行时错误 76)。
Sub GetData ()
Dim oMe As Worksheet, iLine As Long, oFile As Object
Dim oFS As Object, wbQuelle As Workbook
Set oMe = ThisWorkbook.ActiveSheet
Const sDateiPfad As String = "https:\\xxxx.sharepoint.com\sites\001073\xxxxxx\xxxxxx\Anmeldungen\" 'Path is changed because of data protection
iZeile = 19
Application.ScreenUpdating = False
Set oFS = CreateObject ("Scripting.FileSystemObject")
For Each oDatei In oFS.GetFolder (sDateiPfad). Files
If InStrRev (oDatei.name, "xlsx") Then
Set wbQuelle = Workbooks.Open (sDateiPfad & oDatei.name)
With wbQuelle.ActiveSheet
oMe.Cells (iZeile, 2) = .Range ("B5")
oMe.Cells (iZeile, 3) = .Range ("B13")
oMe.Cells (iZeile, 4) = .Range ("B14")
oMe.Cells (iZeile, 5) = .Range ("B15")
oMe.Cells (iZeile, 6) = .Range ("B16")
oMe.Cells (iZeile, 7) = .Range ("B17")
oMe.Cells (iZeile, 8) = .Range ("B22")
oMe.Cells (iZeile, 9) = .Range ("B28")
oMe.Cells (iZeile, 10) = .Range ("B29")
oMe.Cells (iZeile, 11) = .Range ("B36")
oMe.Cells (iZeile, 12) = .Range ("B24")
oMe.Cells (iZeile, 13) = .Range ("G30")
oMe.Cells (iZeile, 14) = .Range ("H53")
oMe.Cells (iZeile, 15) = .Range ("B30")
oMe.Cells (iZeile, 16) = .Range ("B31")
oMe.Cells (iZeile, 17) = .Range ("G26")
oMe.Hyperlinks.Add Anchor:=oMe.Cells (iZeile, 29), Address:=sDateiPfad_
& wbQuelle.name, TextToDisplay:=wbQuelle.name
wbQuelle.Close False
iZeile = iZeile + 1
End With
End If
Next
Set oMe = Nothing: Set wbQuelle = Nothing
End Sub
答案1
使用 Excel 时,SharePoint(和 OneDrive)路径+文件名不能超过 400 个字符。因此,如果宏使用的实际路径+文件名更长,则可以说什么都无法提供。
有几个因素会影响文件命名和路径长度,在某些情况下,您可以使用多达 32767 个字符,但您需要为此对 Windows 进行更改(这很容易)。它不能保证任何特定程序(Excel、SharePoint 等)可以MAX_PATH
完全使用新长度,或者完全使用。对于大多数程序使用的 Windows API32 也是如此。用于许多事情的 Windows Shell 也用于限制一个。即便如此,像 Excel 这样的程序,期望环境将其限制为 260 个字符(255 个“真实”字节和一些“假”字节),可能会有强制执行该限制的代码,因此即使它实际上可以使用更长的限制(如果编码如此),嗯,它还没有更新,所以...
该\\?\
方法可以用于很多事情,但无法克服程序拒绝考虑使用它发送的命名数据的问题。它可能使某些东西可寻址,并为程序员提供其他优势,但它无法让一个被编码为不使用比“任何长度”更长的路径+文件名的程序开始使用更长的路径+文件名。SharePoint 就是一个例子。
另外还有一些其他奇怪的情况。
但是您的特殊情况很可能(因为上面没有显示实际路径)遇到 SharePoint 的 400 个字符的限制,因此它无法使用发送给它的命名数据。