VBA编程“由于另一个程序正在运行中,此操作无法完成.”解决方法.

来源:互联网 发布:旧版淘宝下载2015 编辑:程序博客网 时间:2024/06/10 07:39

这是自动化服务超时引起,它有一个默认的响应时间,解决方法:

在App::InitInstance()里AfxOleInit()之后加上这个:
AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);
AfxOleGetMessageFilter()->SetBusyReply(SERVERCALL_RETRYLATER);
AfxOleGetMessageFilter()->EnableNotRespondingDialog(TRUE);
AfxOleGetMessageFilter()->SetMessagePendingDelay (-1);
如果编译不通过,包含头文件#include <afxole.h>

 

COleMessageFilter类管理OLE应用程序交互所需要的并行能力。
COleMessageFilter类用于可视化编辑服务器和容器应用程序中,以及OLE自动化应用程序中。对于要调用的服务器应用程序,该类可使应用程序保持“忙”的状态,这样其他容器应用程序的调用请求就会被取消或稍后重试。当被调用的应用程序忙时,也可以使用该类确定调用者应用程序将采取什么样的动作。服务器应用程序常用的用法是在文档或其他OLE可访问的对象有可能遭到破坏的情况下调用BeginBusyState 和EndBusyState。在用户界面更新过程中,CWinApp::OnIdle将发起这些调用。
缺省地,当应用程序初始化时就分配一个COleMessageFilter对象。可以使用AfxOleGetMessageFilter检索该对象。
这是一个高级类;你很少需要直接使用该类。
要获得更详细的信息,请参阅“Visual C++ 程序员指南”在线文档中的“服务器:实施一个服务器”一节。
#include <afxole.h>
请参阅:CCmdTarget
COleMessageFilter类成员
构造
COleMessageFilter
构造一个COleMessageFilter对象
操作
Register
注册OLE系统DLL的消息过滤器 Revoke激活OLE系统DLL消息过滤器的注册过程 BeginBusyState使应用程序处于忙的状态 EndBusyState结束应用程序忙的状态 SetBusyReply确定忙的应用程序对OLE调用的回答 SetRetryReply确定调用者应用程序对忙应用程序的回答 SetMessagePendingDelay确定应用程序要等多长时间才对OLE调用做出响应 EnableBusyDialog使能或禁止在被调用的应用程序处于忙状态时所显示的对话框 EnableNotRespondingDialog使能或禁止在被调用的应用程序没有响应时所显示的对话框
重载
OnMessagePending
在处理OLE调用时框架调用该方法处理消息

 

原创粉丝点击