Keywords: VBA | SharePoint | Excel automation
Abstract: This article explores how to open Excel files from SharePoint sites in VBA, addressing common "Path not found" errors. It analyzes the limitations of traditional file access methods and introduces modern solutions using Application.FileDialog, supplemented by WebDAV address conversion techniques. Complete code examples and in-depth technical explanations are provided to help developers efficiently handle SharePoint integration, ensuring code reliability and cross-environment compatibility.
Problem Background and Challenges
When automating Excel tasks, developers often need to dynamically open files from SharePoint sites. However, using traditional methods like ChDir and Application.GetOpenFilename with SharePoint URLs frequently results in "Run-time error 76: Path not found". This occurs because VBA's native file system functions cannot directly parse HTTP or HTTPS protocol paths, even though these paths are accessible in Windows Explorer.
Core Solution: Using Application.FileDialog
To resolve this, it is recommended to use the Application.FileDialog object, which integrates natively with the operating system's file dialog and correctly handles SharePoint paths. The following code example demonstrates this implementation:
Dim SummaryWB As Workbook
Dim vrtSelectedItem As Variant
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = "https://sharepoint.com/team/folder" & "\"
.AllowMultiSelect = False
.Show
For Each vrtSelectedItem In .SelectedItems
Set SummaryWB = Workbooks.Open(vrtSelectedItem)
Next
End With
If SummaryWB Is Nothing Then Exit SubThe key advantage of this approach is that Application.FileDialog processes paths through the operating system interface, automatically supporting SharePoint's WebDAV mapping without manual URL conversion. Developers should note to use the correct separator (backslash or forward slash, depending on SharePoint configuration) for the initial path and ensure the Microsoft Scripting Runtime reference is enabled for enhanced functionality.
Supplementary Technique: WebDAV Address Conversion
For scenarios requiring finer control or handling mixed paths, a WebDAV address conversion function can be integrated. The following function converts SharePoint URLs to WebDAV format, ensuring compatibility with VBA file operations:
Public Function Parse_Resource(URL As String)
Dim SplitURL() As String
Dim i As Integer
Dim WebDAVURI As String
If Not InStr(1, URL, "//", vbBinaryCompare) = 0 Then
SplitURL = Split(URL, "/", , vbBinaryCompare)
WebDAVURI = "\\"
If SplitURL(0) = "https:" Then
For i = 0 To UBound(SplitURL)
If Not SplitURL(i) = "" Then
Select Case i
Case 0, 1
'Skip protocol parts
Case 2
WebDAVURI = WebDAVURI & SplitURL(i) & "@ssl"
Case Else
WebDAVURI = WebDAVURI & "\" & SplitURL(i)
End Select
End If
Next i
Else
For i = 0 To UBound(SplitURL)
If Not SplitURL(i) = "" Then
Select Case i
Case 0, 1
'Skip protocol parts
Case 2
WebDAVURI = WebDAVURI & SplitURL(i)
Case Else
WebDAVURI = WebDAVURI & "\" & SplitURL(i)
End Select
End If
Next i
End If
Parse_Resource = WebDAVURI
Else
Parse_Resource = URL
End If
End FunctionThis function automatically detects the URL protocol (HTTP or HTTPS) and constructs the corresponding WebDAV path (e.g., converting https://sharepoint.com/site/file.xlsx to \\sharepoint.com@ssl\site\file.xlsx). Use it by calling the function after the file dialog to process the path before passing it to Workbooks.Open. Note that cross-domain access may require user credential verification.
Best Practices and Considerations
In practice, it is advisable to prioritize the Application.FileDialog method for its simplicity and reliance on system-level compatibility. For complex integrations, combine it with the WebDAV conversion function to handle edge cases. Key considerations include: ensuring correct SharePoint site paths (test with forward or backslashes), handling potential network latency or authentication prompts, and implementing error handling (e.g., using On Error Resume Next to avoid interruptions). By applying the methods in this article, developers can efficiently integrate VBA with SharePoint, enhancing the robustness of automation scripts.