You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用VBA通过通配符打开SharePoint上的Excel文件

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:19:50