从SharePoint站点打开Excel文件

时间:2013-10-21 21:57:22

标签: excel vba sharepoint excel-vba excel-2010

我正在尝试使用VBA从SharePoint打开Excel文件。因为每次运行宏时我正在查找的文件可能不同,所以我希望能够查看SharePoint文件夹并选择我需要的文件。

当我想在网络驱动器上查找文件时,下面的代码工作正常,但是当我用SharePoint地址替换它时,我得到“运行时错误76:找不到路径”。

Sub Update_monthly_summary()

Dim SummaryWB As Workbook
Dim SummaryFileName As Variant

ChDir  "http://sharepoint/my/file/path"
SummaryFileName = Application.GetOpenFilename("Excel-files,*.xls", _
1, "Select monthly summary file", , False)
If SummaryFileName = False Then Exit Sub

Set SummaryWB = Workbooks.Open(SummaryFileName)

End Sub

当我将此地址粘贴到Windows资源管理器中时,访问SharePoint文件夹没有任何问题,因此我知道路径是正确的。

为什么VBA不喜欢它?

7 个答案:

答案 0 :(得分:10)

尝试使用此代码从SharePoint网站中选择文件:

Dim SummaryWB As Workbook
Dim vrtSelectedItem As Variant

With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "https://sharepoint.com/team/folder" & "\"
    .AllowMultiSelect = False
    .Show
    For Each vrtSelectedItem In .SelectedItems
        Set SummaryWB = Workbooks.Open(vrtSelectedItem)
    Next
End With

If SummaryWB Is Nothing then Exit Sub

如果我没记错的话,必须启用Microsoft Scripting Runtime引用。此外,您的网站可能使用反斜杠,我的使用正斜杠。

答案 1 :(得分:7)

我使用我创建的以下函数将URL转换为WebDAV地址。此函数还可以无损地返回常规系统路径和UNC路径。

通过将此函数添加到VBA项目中的模块并在文件对话框命令之后输入MyNewPathString = Parse_Resource(myFileDialogStringVariable)并使用文件对话框选择的路径之前调用此函数。然后引用" MyNewPathString"使用目标文件位置时。

 Public Function Parse_Resource(URL As String)
 'Uncomment the below line to test locally without calling the function & remove argument above
 'Dim URL As String
 Dim SplitURL() As String
 Dim i As Integer
 Dim WebDAVURI As String


 'Check for a double forward slash in the resource path. This will indicate a URL
 If Not InStr(1, URL, "//", vbBinaryCompare) = 0 Then

     'Split the URL into an array so it can be analyzed & reused
     SplitURL = Split(URL, "/", , vbBinaryCompare)

     'URL has been found so prep the WebDAVURI string
     WebDAVURI = "\\"

     'Check if the URL is secure
     If SplitURL(0) = "https:" Then
         'The code iterates through the array excluding unneeded components of the URL
         For i = 0 To UBound(SplitURL)
             If Not SplitURL(i) = "" Then
                 Select Case i
                     Case 0
                         'Do nothing because we do not need the HTTPS element
                     Case 1
                         'Do nothing because this array slot is empty
                     Case 2
                     'This should be the root URL of the site. Add @ssl to the WebDAVURI
                         WebDAVURI = WebDAVURI & SplitURL(i) & "@ssl"
                     Case Else
                         'Append URI components and build string
                         WebDAVURI = WebDAVURI & "\" & SplitURL(i)
                 End Select
             End If
         Next i

     Else
     'URL is not secure
         For i = 0 To UBound(SplitURL)

            'The code iterates through the array excluding unneeded components of the URL
             If Not SplitURL(i) = "" Then
                 Select Case i
                     Case 0
                         'Do nothing because we do not need the HTTPS element
                     Case 1
                         'Do nothing because this array slot is empty
                         Case 2
                     'This should be the root URL of the site. Does not require an additional slash
                         WebDAVURI = WebDAVURI & SplitURL(i)
                     Case Else
                         'Append URI components and build string
                         WebDAVURI = WebDAVURI & "\" & SplitURL(i)
                 End Select
             End If
         Next i
     End If
  'Set the Parse_Resource value to WebDAVURI
  Parse_Resource = WebDAVURI
 Else
 'There was no double forward slash so return system path as is
     Parse_Resource = URL
 End If


 End Function

此函数将检查您的文件路径是否为URL,以及它是安全的(HTTPS)还是不安全的(HTTP)。如果它是一个URL,那么它将构建适当的WebDAV字符串,以便您可以直接链接到SharePoint中的目标文件。

每次打开文件时,系统都可能会提示用户输入凭据,特别是如果他们与SharePoint场不在同一个域中。

请注意:我没有使用http网站对此进行测试,但我相信它会有效。

答案 2 :(得分:1)

从您的脚本中不要使用http://sharepoint/my/file作为路径而是 \\sharepoint\my\file然后应该工作。它适用于我在C#中完成的程序。

答案 3 :(得分:1)

请注意您的初始代码中有拼写错误

MyNewPathString = ParseResource(myFileDialogStringVariable)

应替换为

MyNewPathString = Parse_Resource(myFileDialogStringVariable)

缺少下划线。

答案 4 :(得分:0)

您可以使用我的方法将SharePoint文件夹映射为网络驱动器。然后你可以按照目前的方式继续进行。

Excel VBA Up-/Download from multiple SharePoint folders

然后,您还可以使用Dir或文件系统对象

浏览文件

答案 5 :(得分:0)

尽管这可能无法完全满足OP需要打开文件对话框的要求,但这是我通过硬编码方式打开通过SharePoint / Team存储的工作簿的方法,该工作簿与标题匹配,并且可能有很多人最终在这里寻找。

>

通过单击“复制链接”并在“ ObjectURL”之后和“ baseURL”之前剥离所需的部分来获取URL。

*.pb.go

答案 6 :(得分:-1)

尝试这样的事情:

Shell ("C:\Program Files\Internet Explorer\iexplore.exe http://sharepoint/my/file/path")

它对我有用。