使用VBA通过SharePoint打开文本文件时遇运行时错误52
问题根源
VBA的Open语句仅支持本地文件路径或已映射为网络驱动器的UNC路径,无法直接解析HTTPS协议的SharePoint在线文件URL,所以执行Open strFile For Input As #1时触发错误52(错误的文件名或编号)。
解决方案
方法1:使用SharePoint本地同步路径
- 先通过OneDrive同步客户端,将目标SharePoint站点同步到本地
- 修改代码中
InitialFileName为本地同步路径,示例:.InitialFileName = "C:\Users\你的用户名\OneDrive - 公司名称\sites\THALI01\" - 后续
Open语句即可正常使用同步后的本地文件路径执行读取操作
方法2:用ADODB.Stream直接读取在线文件
无需同步到本地,直接通过HTTP请求读取SharePoint文件内容,修正后的完整代码如下:
Dim FileToOpen As Variant Dim sh As Worksheet Dim strFile As String Dim objStream As Object Dim strContent As String Dim arrLines() As String Dim i As Long Dim Oneline As String Dim Acq As String ' 指定目标工作表,避免变量未赋值报错 Set sh = ThisWorkbook.Worksheets("Sheet1") ' 替换为你的工作表名称 '-------选择文件------------- Set FileToOpen = Application.FileDialog(msoFileDialogFilePicker) With FileToOpen .Filters.Clear .Filters.Add "Text Files", "*.tx*" .Title = "Browse to text File" .AllowMultiSelect = False .InitialFileName = "https://my.sharepoint.com/sites/THALI01/" If .Show = True Then strFile = .SelectedItems(1) Else Exit Sub ' 用户取消选择时直接退出 End If End With '-----读取在线文件内容----- Set objStream = CreateObject("ADODB.Stream") With objStream .Charset = "utf-8" ' 根据文件实际编码调整,比如gb2312对应简体中文 .Open .LoadFromFile strFile ' 支持HTTPS格式的SharePoint文件路径 strContent = .ReadText .Close End With Set objStream = Nothing ' 按行拆分内容并查找目标行 arrLines = Split(strContent, vbCrLf) For i = LBound(arrLines) To UBound(arrLines) Oneline = arrLines(i) If Left(Oneline, 42) = "Mapping Definition Name: " Then Acq = Trim(Mid(Oneline, 42, 30)) sh.Range("B8") = Acq Exit For End If Next i
额外注意事项
- 确保当前登录账号拥有目标SharePoint文件的访问权限
- 若文件编码非UTF-8,需修改
.Charset参数匹配实际编码 - 原代码中
sh变量未指定具体工作表,需补充赋值语句避免后续报错
内容的提问来源于stack exchange,提问作者Eriknme
相关产品推荐
相关产品推荐

