1

我创建了一些 Office 加载项,用于跟踪文档/演示文稿是否已关闭,然后在关闭文档/演示文稿之前执行一些自定义代码。

所有这些代码在 Word 加载项中都没有任何问题,但在 PowerPoint 加载项中我得到一个

“System.Runtime.InteropServices.COMException (0x80048240): Presentation (unknown member): Invalid request. This operation cannot be executed in this event handler.”-关闭 PowerPoint 应用程序时出错。被调用的方法是presentation.Close()。

如果作为 Ribbon 事件处理程序的一部分调用该方法,则该方法可以正常工作,但如果它由任何 Application-evens (或) 调用PresentationClose,则它无法执行.PresentationBeforeClosePresentationCloseFinalpresentation.Close()

如前所述,我在没有此问题的 Word 加载项中有相同的代码。我知道这两种产品中的事件处理是不同的,但我仍然无法弄清楚为什么在 PowerPoint 中关闭应用程序或关闭演示文稿时会出现问题。

希望有人能提供一些好的意见。

4

2 回答 2

0

我尝试了很多方法,但没有任何效果。所以最好搜索powerpoint进程并通过代码将其杀死。希望这就是你要找的。

Process[] pros = Process.GetProcesses();
  for (int i = 0; i < pros.Count(); i++)
   {
   if (pros[i].ProcessName.ToLower().Contains("powerpnt"))
        {
          pros[i].Kill();
        }
   }
于 2013-12-03T13:54:57.773 回答
0

我遇到了非常相似的东西;为了解决 PPT 中的一些错误或其他问题,我需要关闭然后重新打开当前演示文稿,但无法从事件处理程序中关闭演示文稿(我想这是有道理的,因为它仍在处理属于演示文稿的事件触发它)。

我通过让事件处理程序无模式地加载表单来解决这个问题。这允许事件处理程序中的代码继续到事件处理程序的 End Sub,因此您不再处于事件处理程序中。

表单中的初始化代码然后关闭当前文档并卸载表单。

无需显示表单,因此用户永远不会看到任何内容。

于 2013-01-13T20:36:09.573 回答