本地路径可向ImageList加载图片,SharePoint路径报错如何解决?
问题原因
ImageList控件的ListImages.Add方法不支持直接传入HTTP/HTTPS格式的网络路径——它只识别本地文件路径或内存中的Picture对象。而Excel的Workbooks.Open能正常打开SharePoint路径的文件,是因为Excel本身内置了对SharePoint文件系统的适配逻辑,但ImageList控件没有这个能力,所以会抛出"Path/File access error"错误。
解决方案:先下载图片到本地临时文件,再加载
步骤很简单:把SharePoint上的图片下载到系统临时目录,用临时文件路径加载到ImageList,加载完成后可以删除临时文件。
代码示例
- 先写一个下载图片的辅助函数:
Private Function DownloadSharePointImage(imgUrl As String, savePath As String) As Boolean Dim xhr As Object Set xhr = CreateObject("MSXML2.XMLHTTP.6.0") On Error GoTo Cleanup xhr.Open "GET", imgUrl, False xhr.Send If xhr.Status = 200 Then Dim fso As Object, fileStream As Object Set fso = CreateObject("Scripting.FileSystemObject") Set fileStream = fso.CreateTextFile(savePath, True) fileStream.Write xhr.responseBody fileStream.Close DownloadSharePointImage = True End If Cleanup: Set xhr = Nothing Set fso = Nothing Set fileStream = Nothing End Function
- 调用函数加载图片到ImageList:
Sub LoadImageToImageList() Dim sharePointImgUrl As String Dim tempImgPath As String '替换成你的SharePoint图片路径 sharePointImgUrl = "https://XXX.sharepoint.com/sites/XXX/Picture.png" '生成临时文件路径 tempImgPath = Environ("TEMP") & "\temp_sharepoint_img.png" If DownloadSharePointImage(sharePointImgUrl, tempImgPath) Then '加载图片到ImageList ImageList1.ListImages.Add Key:="1", Picture:=LoadPicture(tempImgPath) '可选:加载完成后删除临时文件 Kill tempImgPath Else MsgBox "图片下载失败,请检查路径或网络连接" End If End Sub
补充说明
- 代码采用后期绑定方式,不需要手动添加
MSXML2相关引用 - 如果SharePoint需要身份验证,可能需要在下载函数中添加凭据处理逻辑(比如适配Windows集成身份验证的XMLHTTP版本)
内容的提问来源于stack exchange,提问作者Almesi
相关产品推荐
相关产品推荐

