我编写了一个用于存档Outlook 2007附件的Visual Basic宏,但没有找到一种完全令人满意的方式来显示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)使用来自Office.FileDialog
的{{1}}(通过工具/参考),然后使用Word的文件对话框,在我的Vista系统上以某种方式永远显示并且并不总是实际将Word带到前景。相反,有时Outlook被阻止,文件对话框在后台的某处停留:
Microsoft Word 12.0 Object Library
还有其他想法吗?
答案 0 :(得分:2)
您最好的选择可能就是使用Windows32 API。有关如何与API交互的示例VBA代码,请参阅this MSDN article。
本文概述了一些不同的技术,但我建议在文章中搜索“COMDLG32.dll”并按照该部分中列出的步骤进行操作。