注册 登录
编程论坛 VFP论坛

如何判断通过VFP打开的Excel是否处于忙碌状态?

ztx19 发布于 2022-07-13 10:09, 2006 次点击
在用VFP对Excel进行操作中,如果Excel处于忙碌状态(如单元格处于活动状态),就会出现“...程序正在忙碌中,因此该操作无法完成。请选择切换至命令,然后更正问题。”的提示,如何判断通过VFP打开的Excel是否处于“忙碌”状态?如果无法判断,如何屏蔽这个提示?

[此贴子已经被作者于2022-7-13 10:18编辑过]

13 回复
#2
csyx2022-07-13 11:01
vfp 有三个相关的属性:_vfp.OLERequestPendingTimeout,OLEServerBusyTimeout,OLEServerBusyRaiseError

[此贴子已经被作者于2022-7-13 11:36编辑过]

#3
ztx192022-07-13 12:52
以下是引用csyx在2022-7-13 11:01:13的发言:

vfp 有三个相关的属性:_vfp.OLERequestPendingTimeout,OLEServerBusyTimeout,OLEServerBusyRaiseError


我试了一下:
oExcel=Createobject("Excel.application")
oExcel.Workbooks.Add
oExcel.Visible=.T.
oExcel.ActiveSheet.Range('A1').Select   &&单元格激活时,这句出现提示:由于"Microsoft Excel - Book1"程序正在忙碌中,因此该操作无法完成。请选择”切换至“命令,然后更正问题。

?_vfp.OLERequestPendingTimeout   &&返回5000
?_vfp.OLEServerBusyTimeout       &&返回10000
?_vfp.OLEServerBusyRaiseError    &&返回.F.

求详解,谢谢!


[此贴子已经被作者于2022-7-13 12:58编辑过]

#4
csyx2022-07-13 12:59
以下是引用ztx19在2022-7-13 12:52:34的发言:
求详解

研读vfp自带的帮助,搜索这些属性。例如:OLERequestPendingTimeout

程序代码:
OLERequestPendingTimeout 属性

指定在发出自动化请求后多长时间显示忙碌消息。运行时读/写。

ApplicationObject.OLERequestPendingTimeout[=nMilliseconds]

 
返回值
nMilliseconds
指定在自动化请求挂起时显示繁忙消息之前必须经过的毫秒数。发生鼠标或键盘事件时会显示忙碌消息。
nMilliseconds 的默认值为 5,000 毫秒。

如果 nMilliseconds 为 0,当自动化请求挂起并且发生鼠标或键盘事件时,不会显示忙碌消息。

适用于:应用程序对象 | _VFP 系统变量

参考
OLEServerBusyRaiseError 属性
OLEServerBusyTimeout 属性


程序代码:
OLEServerBusyRaiseError 属性

指定当自动化请求被拒绝时是否显示错误消息。运行时读/写。

ApplicationObject.OLEServerBusyRaiseError[=lExpression]

 
lExpression 以下设置之一:

.T.  当 OLEServerBusyTimeout 属性指定的毫秒数已过时,不会发生错误并且不会显示忙碌消息。
.F.  (默认)当 OLEServerBusyTimeout 属性指定的毫秒数已过时,将发生错误并显示忙碌消息。


[此贴子已经被作者于2022-7-13 13:12编辑过]

#5
ztx192022-07-13 13:19
还是不懂,我这样设了之后,还是显示忙碌消息:
_vfp.OLERequestPendingTimeout=0
#6
吹水佬2022-07-13 13:59
不清楚你用VFP具体是怎样处理EXCEL表
先查一下是不是VFP引起的异常

#7
ztx192022-07-13 15:42
问题解决了!谢谢!!!
oExcel=Createobject("Excel.application")
oExcel.Workbooks.Add
oExcel.Visible=.T.
_vfp.OLEServerBusyRaiseError=.t.
WAIT WINDOW '等待过程中激活Excel表中的一个单元格'
oExcel.ActiveSheet.Range('A1').Select

#8
吹水佬2022-07-13 15:52
回复 7楼 ztx19
测试就这几句也没异常
oExcel=Createobject("Excel.application")
oExcel.Workbooks.Add
oExcel.Visible=.T.
oExcel.ActiveSheet.Range('A1').Select
#9
ztx192022-07-13 16:19
以下是引用吹水佬在2022-7-13 15:52:15的发言:

测试就这几句也没异常
oExcel=Createobject("Excel.application")
oExcel.Workbooks.Add
oExcel.Visible=.T.
oExcel.ActiveSheet.Range('A1').Select

oExcel=Createobject("Excel.application")
oExcel.Workbooks.Add
oExcel.Visible=.T.
_vfp.OLEServerBusyRaiseError=.t.  &&如果不加这一句,程序暂停时双击激活Excel一个单元格,再继续程序运行,过一会儿(大约几秒种)就有问题了。
WAIT WINDOW '等待过程中激活Excel表中的一个单元格'
oExcel.ActiveSheet.Range('A1').Select
#10
ztx192022-07-13 16:36
在csyx的帮助下,几经周折问题基本解决,谢谢吹水版主的关注!
#11
吹水佬2022-07-13 17:02
回复 9楼 ztx19
测试还是会出现异常(按一键继续后点击VFP代码窗口)
只有本站会员才能查看附件,请 登录
#12
sostemp2022-07-13 17:09
变换程序确实是可能会产生这样的对话框的。
一般象这种自动化操作时,写代码锁定鼠标禁人为操作,就不会报错了

#13
sostemp2022-07-13 17:30
回复 11楼 吹水佬
是的,加那句作用性有限的。
禁键鼠操作,可以避免。

#14
吹水佬2022-07-14 10:15
系统也会抛出 0x80010001 异常
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

1