如何使用VBA通过通配符打开SharePoint上的Excel文件
嘿,我懂你遇到的麻烦了——你想用VBA打开SharePoint上每天改名的Excel文件,用通配符*.xlsx直接传给Workbooks.Open却行不通,但用完整文件名就没问题。这其实是因为Workbooks.Open本身不支持在HTTPS的SharePoint路径里直接用通配符,它需要精确的文件URL才行。下面给你两种实用的解决方案:
方案一:映射SharePoint文件夹为网络驱动器(简单易上手)
这种方法把SharePoint文件夹变成本地“驱动器”,就能用熟悉的Dir函数查找匹配的文件了:
步骤1:映射网络驱动器
- 打开Windows文件资源管理器,右键点击「此电脑」→「映射网络驱动器」
- 在「文件夹」输入框中,粘贴你的SharePoint文件夹的完整URL(注意是文件夹路径,不是单个文件的链接,比如
https://xxxxxx.sharepoint.com/sites/你的站点名/Shared Documents/目标文件夹) - 勾选「登录时重新连接」,点击「完成」,系统会用你当前的SharePoint账号自动验证
步骤2:VBA代码实现
Sub Abrir() Dim xlFile As String Dim folderPath As String ' 关闭屏幕刷新和提示,提升运行速度 Application.ScreenUpdating = False Application.DisplayAlerts = False ' 替换成你映射的驱动器路径+目标文件夹 folderPath = "Z:\你的目标文件夹\" ' 用Dir函数查找第一个匹配"excel file*.xlsx"的文件 xlFile = Dir(folderPath & "excel file*.xlsx") If xlFile <> "" Then ' 拼接完整路径并打开文件 Workbooks.Open folderPath & xlFile Else MsgBox "没找到符合条件的Excel文件哦!" End If ' 恢复屏幕刷新和提示 Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
方案二:用SharePoint REST API获取文件(无需映射驱动器,适合自动化)
如果不想映射驱动器,可以用SharePoint的REST API直接获取文件夹里的文件列表,筛选出匹配的文件后打开:
Sub AbrirFromSharePointREST() Dim xmlHttp As Object Dim jsonResponse As String Dim fileUrl As String Dim siteUrl As String Dim folderRelativeUrl As String Application.ScreenUpdating = False Application.DisplayAlerts = False ' 替换成你的SharePoint站点URL siteUrl = "https://xxxxxx.sharepoint.com/sites/你的站点名" ' 替换成目标文件夹相对于站点的路径(比如"/Shared Documents/目标文件夹") folderRelativeUrl = "/Shared Documents/目标文件夹" ' 创建HTTP请求对象 Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0") ' 调用SharePoint REST API获取文件夹下的文件,筛选文件名以"excel file"开头的 xmlHttp.Open "GET", siteUrl & "/_api/web/GetFolderByServerRelativeUrl('" & folderRelativeUrl & "')/Files?$filter=startswith(Name,'excel file')", False ' 设置请求头,指定返回JSON格式 xmlHttp.setRequestHeader "Accept", "application/json;odata=verbose" ' 发送请求(当前登录的SharePoint账号会自动验证) xmlHttp.send If xmlHttp.Status = 200 Then jsonResponse = xmlHttp.responseText ' 从JSON响应中提取第一个匹配文件的URL(这里用简单的字符串解析,也可以用专业JSON库) If InStr(jsonResponse, "ServerRelativeUrl") > 0 Then fileUrl = Mid(jsonResponse, InStr(jsonResponse, "ServerRelativeUrl") + 20) fileUrl = Left(fileUrl, InStr(fileUrl, """") - 1) ' 拼接完整URL并打开文件 Workbooks.Open siteUrl & fileUrl Else MsgBox "没找到符合条件的Excel文件哦!" End If Else MsgBox "请求失败,状态码:" & xmlHttp.Status End If Set xmlHttp = Nothing Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
小提示
- 方案二中,如果你不确定文件夹的相对路径,可以打开SharePoint文件夹,复制浏览器地址栏的URL,去掉站点URL部分就是相对路径。
- 如果你的SharePoint是旧版经典站点,REST API的端点可能需要微调,但大部分现代站点都兼容上面的代码。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

