2

我为 Outlook 2007 的附件归档编写了一个 Visual Basic 宏,但没有找到一种完全令人满意的方法来显示 Outlook 宏中的目录选择器。现在,我对 Windows API 或 VB(A) 编程都不太了解,但我在 Microsoft 应用程序中最常看到的“标准”Windows 文件对话框似乎是一个显而易见的选择,但它似乎并不容易获得来自 Outlook 的宏。

理想情况下,目录选择器至少应该允许手动粘贴文件路径/URI 作为导航的起点,因为有时我已经为同一目录打开了一个资源管理器窗口。

Outlook 宏中目录选择器的最佳选择是什么?

我已经尝试过但没有完全令人满意的两件事是(代码被简化并且没有错误处理,并且可能也可以在旧版 Outlook 中运行):

1)使用Shell.Applicationwhich 不允许我通过剪贴板实际粘贴起点或执行其他操作,例如重命名文件夹:

  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.FileDialogfrom 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)

还有其他想法吗?

4

1 回答 1

2

您最好的选择可能是为此使用 Windows32 API。有关如何与 API 交互的示例 VBA 代码,请参阅此 MSDN 文章。

本文概述了几种不同的技术,但我建议在文章中搜索“COMDLG32.dll”并按照该部分中概述的步骤进行操作。

于 2008-09-02T13:26:36.690 回答