2

我在 Windows 7 下使用 VBA 中的自动化(在此示例中为 MS Access 2007,但应该不会有太大变化)以编程方式生成 Office 文档(在我的情况下为 Word 或 Excel 2007)。这工作正常。

由于文档是自动生成的,我不希望它们出现在最近的列表中。对于 Word 中的最近列表,我可以在保存文档时添加“AddToRecentFiles:=False”(参见示例),或者我可以在之后通过“Application.RecentFiles ...”删除条目

我的代码

Set objWord = CreateObject("Word.Application")

Set curDocument = objWord.Documents.Add

curDocument.SaveAs FileName:=Folder + "text.doc", FileFormat:=wdFormatDocument, 
            AddToRecentFiles:=False
curDocument.Close

问题是我找不到从 Windows 7 禁用最近列表的方法(即,在 Word 任务栏中带有最近项目的跳转列表或资源管理器中上次使用的文件夹和开始菜单中 Word 的最近列表)。 Word 2007 的 Windows7 跳转列表示例,其中包含指向自动生成的文档的链接

我知道这些列表存储在 %APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations 下,我发现要操作 Jumplist 有“WindowsAPICodePack”(我不能从 VBA 使用,对吗?)。

要添加最近列表中的项目,我可以使用“shell32.dll”库中的旧 API SHAddToRecentDocs,但使用此 API 函数删除不再起作用,因为它似乎只会影响旧“/recent”文件夹中的条目(甚至删除我不打算的所有内容)。Windows 7 任务栏 API 上的演示似乎也只提到了如何添加项目,而不是如何避免这样做或删除特定条目。

我是否遗漏了某些东西,或者没有——在 VBA 中简单且理想地可用——操作(或暂时禁用)Windows 7 录制的方法?

亲切的问候安德烈亚斯

4

1 回答 1

1

在使用 Sharepoint 以编程方式处理 Word 和其他办公文档时,我遇到了类似的问题。

您可以通过 PresentationFramework 库 (.Net 4) 或 3.5(可能更早版本)的 WindowsAPICodePack 访问 JumpList 对象,但似乎没有以编程方式删除 JumpListItems 的方法。

我发现一篇文章建议您可以禁用 Word 通过注册表项将项目添加到 JumpList。http://www.add-in-express.com/forum/read.php?PAGEN_1=2&FID=5&TID=8124#nav_start以编程方式执行此操作应该不会太难(如果您在生成文件)。

我还没有机会尝试这是否有效。如果您找到更优雅的解决方案,请告诉我!

更新:在我的解决方案中,我最终根据 Word 最近文件列表重新生成了跳转列表(我向后循环遍历内部 Word 最近文件列表并为每个文件调用 JumpList.AddToRecent 方法)。

于 2011-07-28T09:37:48.420 回答