Высокие статистические технологии

Форум сайта семьи Орловых

Текущее время: Вт мар 19, 2024 9:15 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Как создать (показать на листе) дерево папок в Excel?
СообщениеДобавлено: Вт апр 21, 2009 12:57 pm 
Не в сети

Зарегистрирован: Пт июл 25, 2008 7:43 pm
Сообщений: 1
Откуда: Миасс
Для выбора директории (например, чтобы занести путь в TextBox) нужно показать на листе Excel дерево папок.
Как это можно сделать вручную и программно?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб апр 25, 2009 10:10 pm 
Не в сети
Site Admin

Зарегистрирован: Пн сен 27, 2004 10:26 pm
Сообщений: 114
Если Вы хотите разместить дерево папок именно на листе 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.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB