MS Outlook 2007中Visual Basic宏的目录选择器

时间:2020-03-05 18:46:22  来源:igfitidea点击:

我写了一个Visual Basic宏来存档Outlook 2007的附件,但是没有找到一种完全令人满意的方式来显示Outlook宏中的目录选择器。现在,我对Windows API或者VB(A)编程一无所知,但是我经常在Microsoft应用程序中看到的"标准" Windows文件对话框似乎是一个显而易见的选择,但它似乎并不容易使用从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)使用Microsoft Word 12.0 Object Library(通过工具/引用)中的Office.FileDialog(然后通过工具/引用),然后使用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)

还有其他想法吗?

解决方案

回答

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

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