Средство выбора каталогов для макроса Visual Basic в MS Outlook 2007 - PullRequest
2 голосов
/ 02 сентября 2008

Я написал макрос Visual Basic для архивирования вложений для Outlook 2007, но не нашел полностью удовлетворительного способа отображения средства выбора каталогов из макроса Outlook. Сейчас я не очень разбираюсь ни в Windows API, ни в программировании на VB (A), но «стандартный» диалог файлов Windows, который я чаще всего вижу в приложениях Microsoft, может показаться очевидным выбором, но он не так легко доступен. из макросов Outlook.

В идеале средство выбора каталогов должно, по крайней мере, позволять вручную вставлять путь к файлу / URI в качестве отправной точки для навигации, поскольку иногда у меня уже открыто окно проводника для того же каталога.

Каков наилучший выбор средств выбора каталогов в макросах Outlook?

Две вещи, которые я уже попробовал и не нашел полностью удовлетворительными: (код упрощен, без обработки ошибок и, вероятно, также работает в более старых версиях Outlook):

1) Использование Shell.Application, которое не позволяет мне фактически вставить начальную точку через буфер обмена или выполнять другие операции, такие как переименование папок:

  Set objShell = CreateObject("Shell.Application")
  sMsg = "Select a Folder"
  cBits = 1
  xRoot = 17
  Set objBFF = objShell.BrowseForFolder(0, sMsg, cBits, xRoot)
  path = objBFF.self.Path

2) Использование Office.FileDialog из Microsoft Word 12.0 Object Library (через инструменты / ссылки), а затем использование диалогового окна файлов Word, которое каким-то образом выводится из моей системы Vista навсегда и не всегда выводит Word на первый план. Вместо этого иногда Outlook блокируется, и диалоговое окно файла остается где-то на заднем плане:

  Dim objWord As Word.Application
  Dim dlg As Office.FileDialog
  Set objWord = GetObject(, "Word.Application")
  If objWord Is Nothing Then
     Set objWord = CreateObject("Word.Application")
  End If
  objWord.Activate
  Set dlg = objWord.FileDialog(msoFileDialogFolderPicker)
  path = dlg.SelectedItems(1)

Есть еще идеи?

1 Ответ

2 голосов
/ 02 сентября 2008

Лучше всего будет использовать для этого Windows32 API. См. эту статью MSDN для примера кода VBA о том, как взаимодействовать с API.

В статье описываются несколько различных методов, но я бы предложил поискать в статье «COMDLG32.dll» и выполнить действия, описанные в этом разделе.

...