Страница 1 из 1

Excel VBA - обьект Browse

Добавлено: 16 дек 2005, 13:34
_Andrew
Подскажите есть ли в VBA стандартный обьект Browse(не уверен что он именно так называется) с помощью которого можно производить выбор директории или файла.

Добавлено: 16 дек 2005, 14:01
Naeel Maqsudov
Есть 2 пути
1) использовать функци WinAPI (сложнее для начинающих)
2) использовать ActiveScripting (проще, но требует scrrun.dll, которая, впрочем, является стандартным компонентом Windows)

Для первого - изучайте WinAPI
Для второго:
Подключите с помощью меню Tools/References к VBA проекту "Microsotf Scripting Runtime".
И пишите:

Код: Выделить всё

  Dim fs As New Scripting.FileSystemObject, dd As Scripting.Folders, ff As Scripting.Files
  Dim d As Scripting.Folder, f As Scripting.File

  Set dd = fs.GetFolder("C:\")
  Set ff = dd.Files
  For each d in dd ------- Это цикл по именам папок
     d.SubFolders ------- Это коллекция подпапок в папке d
  For each f in ff ------ Это по всем файлам


Добавлено: 16 дек 2005, 14:51
Naeel Maqsudov
Сечас подумал.....

Возможно имелось в виду диалоговое окошко "Выбор папки"

Тогда так:
Подключите аналогично к проекту библиотеку "Microsoft Shell Controls And Automations"

Код: Выделить всё

Sub qwe()
  Dim sh As New Shell32.Shell
  Dim f As Shell32.Folder
  Set f = sh.BrowseForFolder(0, "qwe", 0)
    
  'f - это папка Ставьте после f точку и в подстрочнике ищите нужные свойства и методы

End Sub
Данная библиотека умеет работать с ярлыками, менюшками, которые у файлов в проводнике появляются по правой кнопке, с пространством имен Windows (т.е. в отличие от Sripting позволяет ходить и по виртуальным папкам Windows shell), а также с самими окнами проводника.

Добавлено: 16 дек 2005, 14:54
alexx
Hyжeн диaлoг?
Прощe:

(Excel)

Код: Выделить всё

file = Application.GetOpenFilename()

Добавлено: 17 дек 2005, 06:16
Avsha
смотрите темы...
для выбора папки -
[4] Надстройка Excel получения списка папок и файлов
forum/viewtopic.php?t=4705

для выбора файлов -
Проблема с функцией GetOpenFileName
forum/viewtopic.php?t=4797