使用 VBA 从 SharePoint 下载文件导致文件损坏 - 即使有解决方案

Downloading a file from SharePoint using VBA results in a corrupt file -even with solution

Downloading a file from SharePoint using VBA results in a corrupt file

您好,我一直在尝试从我们的 Teams Sharepoint 下载一个文件到我们本地网络上的服务器位置。 但是,即使在我尝试下载文件之前,文件也无法正确打开(请参阅下面的代码)。 excel 文件打开但没有数据或网格显示

我的观察是我的文件 link 看起来与示例不同,但由于它是由共享点中的“复制 Link”按钮生成的,我假设(这可能很危险)它是行。我可以手动打开文件

另一个观察结果是另一个用户可能同时访问该文件

任何意见或建议。

宏的目的是打开一个 sheet,删除其他用户可能对导出到本地网络作为 csv 设置的任何过滤器(该文件将由 bcp 获取 SQL 服务器)

我的起始密码是

    Option Explicit

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" ( _
ByVal pCaller As Long, ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long


Sub Get_BuyerComments()
Dim i As Integer

'Const strUrl As String = "https://<Changed>.sharepoint.com/:x:/s/PlanningPurchasing/JOB1 comments.xlsx ' does not file file
Const strUrl As String = "https://<Changed>.sharepoint.com/:x:/s/PlanningPurchasing/Eac2D7-rfQlIlxOrHedg7jUBhgkHq2aGRppJ-yxKU4SYTw?e=HcsT3K"
'Const strUrl As String = "https://teams.microsoft.com/l/file/<Changed>-7DAB-4809-9713-AB1DE760EE35?tenantId=7b63345c-30b9-4fa5-913d-94d8c63cf3b9&fileType=xlsx&objectUrl=https%3A%2F%2Fbladonjetslimited.sharepoint.com%2Fsites%2FPlanningPurchasing%2FShared%20Documents%2FGeneral%2FJOB1%20comments.xlsx&baseUrl=https%3A%2F%2Fbladonjetslimited.sharepoint.com%2Fsites%2FPlanningPurchasing&serviceName=teams&threadId=19:f5359f47e8244f8e8042305cba4f9748@thread.tacv2&groupId=9b8235b6-faed-4285-b95b-07aec3d8763c"
Workbooks.Open Filename:=strUrl
Dim strSavePath As String
Dim returnValue As Long

strSavePath = "\<Changed>\BPA Exports\Shortage Report\Production\Processing\butercomments.xlsx"
returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0)


End Sub

您需要通过 SharePoint 的身份验证(登录)。您在本主题和上一个主题中的代码似乎不包含任何类型的身份验证。

文件可能没有损坏,您正在下载的只是“拒绝访问”页面,而不是文件。例如,您可以使用记事本检查文件的内容。

URLDownloadToFile 非常适合 Internet 下载,但您需要针对 SharePoint 验证 用户。这对于 VBA 来说并不简单。我建议您使用一些更适合该任务的工具,而不是 VBA,例如 power automate