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