浏览到Sharepoint文件夹

时间:2017-04-17 22:46:29

标签: vba excel-vba winapi sharepoint excel

在Excel VBA中,我使用下面的代码浏览到文件夹。但它没有看到SharePoint文件夹。如何浏览到SharePoint文件夹?

我确实看到我可以要求用户将驱动器映射到SharePoint,然后代码会看到映射的驱动器。我还看到,如果我让用户提供SharePoint路径作为文本字符串,我可以以编程方式映射驱动器。但有可能只是浏览它而不要求用户提供任何东西吗?

这是我用来浏览文件夹的代码。这是来自Chip Pearson的网站,刚刚转换为64位Excel:

Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
Private Const BIF_BROWSEFORPRINTER As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const MAX_PATH As Long = 260

Type BrowseInfo
    hOwner As LongPtr
    pidlRoot As Long
    pszDisplayName As String
    lpszINSTRUCTIONS As String
    ulFlags As Long
    lpfn As LongPtr
    lParam As LongPtr
    iImage As Long
End Type

Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type

Declare PtrSafe Function SHGetPathFromIDListA Lib "shell32.dll" ( _
    ByVal pidl As LongPtr, _
    ByVal pszBuffer As String) As Long

Declare PtrSafe Function SHBrowseForFolderA Lib "shell32.dll" ( _
    lpBrowseInfo As BrowseInfo) As LongPtr



Function BrowseFolder(Optional Caption As String = "") As String

Dim BrowseInfo As BrowseInfo
Dim FolderName As String
Dim ID As LongPtr
Dim Res As Long

With BrowseInfo
   .hOwner = 0
   .pidlRoot = 0
   .pszDisplayName = String$(MAX_PATH, vbNullChar)
   .lpszINSTRUCTIONS = Caption
   .ulFlags = BIF_RETURNONLYFSDIRS
   .lpfn = 0
End With

FolderName = String$(MAX_PATH, vbNullChar)
ID = SHBrowseForFolderA(BrowseInfo)
If ID Then
   Res = SHGetPathFromIDListA(ID, FolderName)
   If Res Then
       BrowseFolder = Left$(FolderName, InStr(FolderName, vbNullChar) - 1)
   End If
End If

End Function



Function test__BrowseFolder()
    Dim FName As String
    FName = BrowseFolder(Caption:="Select A Folder")
    If FName = vbNullString Then
        Debug.Print "No Folder Selected"
    Else
        Debug.Print "Selected Folder: " & FName
    End If
End Function

0 个答案:

没有答案