VBA перетащите файл в форму пользователя, чтобы получить имя файла и путь

Я хотел бы научиться новому трюку, но я не на 100% уверен, что это возможно в VBA, но я думал, что проверю здесь с гуру.

то, что я хотел бы сделать, это отказаться от старого доброго getopenfilename или окна браузера (было очень сложно получить начальный каталог, установленный на нашем сетевом диске), и я хотел бы создать форму пользователя VBA, где пользователь может перетащить файл с рабочего стола или окна браузера на форму, и VBA загрузит имя файла и путь. Я снова ... не уверен, что это возможно, но если это так или если кто-то сделал это раньше, я был бы признателен за указатели. Я знаю, как настроить форму пользователя, но у меня нет никакого реального кода за пределами этого. Если есть что-то, что я могу предоставить, дайте мне знать.

Спасибо за ваше время и внимание!

3 ответов


я нашел способ достичь этого. Насколько я могу судить, это можно сделать только с помощью элемента управления treeview. Возможно, вам придется щелкнуть правой кнопкой мыши панель инструментов, чтобы найти и добавить ее. Он будет там под "дополнительным контролем" или что-то в этом роде. Вам понадобятся две вещи помимо контроля.

на UserForm_Initialize sub вам понадобится следующая строка кода, чтобы включить перетаскивание:TreeView1.OLEDropMode = ccOLEDropManual:

UserForm_Initialize()
    TreeView1.OLEDropMode = ccOLEDropManual
End Sub

тогда вам понадобится Private Sub TreeView1_OLEDragDrop событие. Я опустил все параметры для экономии места. Их будет легко найти. В этом sub просто объявите строку, возможно strPath или что-то в этом роде, чтобы сохранить имя файла и путь и установить strPath = Data.Files(1) и что получить имя файла и путь к файлу, который пользователь перетаскивает в элементе управления TreeView. Это предполагает, что пользователь перетаскивает только один файл за раз, но, насколько я могу судить, это должно быть что-то, что можно сделать, перетаскивая несколько файлов, если вы экспериментируете с ним.

Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
    StrPath = Data.Files(1)
End Sub

Редактировать: Вы также необходимо будет добавить ссылку на Microsoft Windows Common Controls 6.0

Я также добавил пример кода.


решение Мэтта отлично, нужно только убедиться:

необходимо добавить элемент управления TreeView, который поддерживает операцию OLEDragDrop:

щелкните правой кнопкой мыши область инструментов, содержащую все доступные элементы управления. Выберите "Дополнительные элементы управления..." Включить: "Microsoft TreeView control, версия 6.0"


Я знаю, что это старый нить. Будущие читатели, если вы после некоторого прохладного пользовательского интерфейса, вы можете проверить мой Github для примера базы данных с помощью dll-оболочки .NET. Что позволяет просто вызвать функцию и открыть filedialog с помощью file-drag-and-drop