Если Вы хотите разместить дерево папок именно на листе Excel, то Вам придется вначале его вывести на лист, дать возможность пользователю кликом на той или иной ячейке выбрать папку в дереве, после чего считать его выбор и записать в TextBox.
Пример кода, строящего дерево папок на листе Excel, Вы можете взять в макросе
http://forum.orlovs.pp.ru/cat.zip
Если же Вам нужно просто получить от пользователя путь к какой-либо папке, после чего использовать его для каких-либо целей, то лучше воспользоваться встроенным в Windows API окном выбора папки. Для его вывода на экран можно применить следующий код:
Цитата:
Код:
Public Type BROWSEINFO
hwndOwner As Long
pidlRoot As Long
pszDisplayName As String
pszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Const MAX_PATH As Long = 260
Const dhcErrorExtendedError = 1208&
Const dhcNoError = 0&
Const dhcCSIdlDesktop = &H0
Const dhcCSIdlPrograms = &H2
Const dhcCSIdlControlPanel = &H3
Const dhcCSIdlInstalledPrinters = &H4
Const dhcCSIdlPersonal = &H5
Const dhcCSIdlFavorites = &H6
Const dhcCSIdlStartupPmGroup = &H7
Const dhcCSIdlRecentDocDir = &H8
Const dhcCSIdlSendToItemsDir = &H9
Const dhcCSIdlRecycleBin = &HA
Const dhcCSIdlStartMenu = &HB
Const dhcCSIdlDesktopDirectory = &H10
Const dhcCSIdlMyComputer = &H11
Const dhcCSIdlNetworkNeighborhood = &H12
Const dhcCSIdlNetHoodFileSystemDir = &H13
Const dhcCSIdlFonts = &H14
Const dhcCSIdlTemplates = &H15
Const dhcBifReturnAll = &H0
Const dhcBifReturnOnlyFileSystemDirs = &H1
Const dhcBifDontGoBelowDomain = &H2
Const dhcBifIncludeStatusText = &H4
Const dhcBifSystemAncestors = &H8
Const dhcBifBrowseForComputer = &H1000
Const dhcBifBrowseForPrinter = &H2000
Public Declare Function SHBrowseForFolder Lib "shell32.dll" (ByRef lpbi As BROWSEINFO) As Long
Public Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, ByRef pidl As Long) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Public Function BrowseForFolder(ByVal lngCSIDL As Long, ByVal lngBiFlags As Long, strFolder As String, Optional ByVal hWnd As Long = 0, Optional pszTitle As String = "Select Folder") As Long
Dim usrBrws As BROWSEINFO
Dim lngReturn As Long
Dim lngIDL As Long
If SHGetSpecialFolderLocation(hWnd, lngCSIDL, lngIDL) = 0 Then
With usrBrws
.hwndOwner = hWnd
.pidlRoot = lngIDL
.pszDisplayName = String$(MAX_PATH, vbNullChar)
.pszTitle = pszTitle
.ulFlags = lngBiFlags
End With
lngIDL = SHBrowseForFolder(usrBrws)
If lngIDL > 0 Then
strFolder = String$(MAX_PATH, vbNullChar)
If SHGetPathFromIDList(lngIDL, strFolder) Then
strFolder = Left(strFolder, InStr(1, strFolder, vbNullChar))
lngReturn = dhcNoError
Else
strFolder = Left(usrBrws.pszDisplayName, InStr(1, usrBrws.pszDisplayName, vbNullChar))
lngReturn = dhcNoError
End If
Else
lngReturn = dhcErrorExtendedError
End If
BrowseForFolder = lngReturn
Else
BrowseForFolder = "Cancel"
End If
End Function
Функция BrowseForFolder выведет на экран окно выбора папки и запишет в переменную strFolder путь к выбранной папке. Использовать можно, например, так:
Код:
Sub GetBrowse()
Dim strPath As String 'сюда будет записан выбранный путь
Call BrowseForFolder(dhcCSIdlDesktop, dhcBifReturnOnlyFileSystemDirs, strPath, pszTitle:="Выбор папки:")
MsgBox strPath 'вывод пути в сообщении
End Sub
В Вашем случае нужно будет вызвать эту функцию по нажатию кнопки или ссылки, а потом поместить полученный путь в TextBox.