将项添加到ROT(运行对象表)

时间:2014-12-12 13:11:20

标签: c# excel excel-vba excel-addins running-object-table vba

我知道如何使用*****。GetActiveObject(ProgId),但问题是我使用此代码行的几个应用程序都没有添加到ROT中,即使它们已经打开,我得到了一个HRESULT错误。但是,如果我单击另一个应用程序然后返回到原始应用程序,代码行就可以正常工作。

我离开这个模糊的原因是因为这是我在10多个应用程序中遇到的问题。

我不发布代码的原因是因为我不相信这个问题是基于代码的,而是我认为这个问题是由于我对此的简单缺乏理解。

我遇到此问题的最重要的程序之一是" Microsoft Excel"。 我想做的就是能够在特定的单元格中启动用户。

我已经仔细查看了如何在Excel中使用*****。GetActiveObject(ProgId),但是,似乎没有任何合理的答案。本程序可以用c#编写,但是,如果它在visual basic中更简单则不是问题

1 个答案:

答案 0 :(得分:2)

http://support.microsoft.com/kb/316126

  

COM服务器应该在Running Object中注册   启动后的表。 Office程序在注册时自行注册   失去焦点。如果程序尝试在之前附加到正在运行的实例   程序失去焦点,您可能会收到一条错误消息。对于   有关如何解决此问题的其他信息,请单击   下面的文章编号,以查看Microsoft中的文章   知识库:316125 PRB:Visual C#.NET错误附加到运行   Office应用程序实例

     

使用代码,您可以将焦点从Office应用程序更改为您的   自己的应用程序(或其他应用程序)允许它注册   本身在ROT。此外,如果您的代码正在启动   您可能需要Office应用程序的可执行(.exe)文件   在尝试之前等待Office应用程序完成加载   附加到正在运行的实例。

在尝试连接之前,请确保已激活另一个窗口。如示例所示,您可以使用Form.Activate来关注自己的表单,从而导致Office应用失去焦点。