VB6 選擇文件夾路徑

'---------------------------------------------------------------------------------------
' Module    : ModuleFile
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 文件相關操做模塊
' Function  : 一、選取文件夾
'---------------------------------------------------------------------------------------
 
Option Explicit
 
Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
Const BIF_RETURNONLYFSDIRS = 1
Const BIF_NEWDIALOGSTYLE = &H40
Const BIF_EDITBOX = &H10
Const BIF_USENEWUI = BIF_NEWDIALOGSTYLE Or BIF_EDITBOX
Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
 
 
'---------------------------------------------------------------------------------------
' Procedure : BrowseForFolder
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 選取文件夾(不含新建文件夾指令) 返回BrowseForFolder
'---------------------------------------------------------------------------------------
'
Public Function BrowseForFolder(Optional sTitle As String = "請選擇文件夾") As String
    Dim iNull As Integer, lpIDList As Long, lResult As Long
    Dim sPath As String, udtBI As BrowseInfo
 
    With udtBI
        .hWndOwner = 0 ' Me.hWnd
        .lpszTitle = lstrcat(sTitle, "")
        .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_USENEWUI
    End With
    lpIDList = SHBrowseForFolder(udtBI)
    If lpIDList Then
       sPath = String$(MAX_PATH, 0)
        SHGetPathFromIDList lpIDList, sPath
        CoTaskMemFree lpIDList
       iNull = InStr(sPath, vbNullChar)
        If iNull Then
          sPath = Left$(sPath, iNull - 1)
        End If
    End If
 
    BrowseForFolder = sPath
End Function
 
 
'---------------------------------------------------------------------------------------
' Procedure : BrowseForFolder1
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 選取文件夾路徑(含新建文件夾) 返回BrowseForFolder1 字符串
'---------------------------------------------------------------------------------------
'
Public Function BrowseForFolder1(Optional sTitle As String = "請選擇文件夾") As String
    Dim iNull As Integer, lpIDList As Long, lResult As Long
    Dim sPath As String, udtBI As BrowseInfo
 
    With udtBI
        .hWndOwner = 0 ' Me.hWnd
        .lpszTitle = lstrcat(sTitle, "")
        .ulFlags = BIF_RETURNONLYFSDIRS
    End With
    lpIDList = SHBrowseForFolder(udtBI)
    If lpIDList Then
       sPath = String$(MAX_PATH, 0)
        SHGetPathFromIDList lpIDList, sPath
        CoTaskMemFree lpIDList
       iNull = InStr(sPath, vbNullChar)
        If iNull Then
          sPath = Left$(sPath, iNull - 1)
        End If
    End If
 
    BrowseForFolder1 = sPath
End Function

  

在主窗體中能夠插入按鈕。添加下述代碼,其中前一個沒有新建文件夾功能,後一個有新建文件夾功能shell

Option Explicit

Private Sub Command1_Click()
Dim path1 As String
path1 = BrowseForFolder
MsgBox path1
End Sub

Private Sub Command2_Click()
Dim path As String
path = BrowseForFolder1
MsgBox path
End Sub