以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  这样的问题如何理解?:被呼叫方拒绝接收呼叫。  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=140776)

--  作者:wcs
--  发布时间:2019/9/13 13:32:00
--  这样的问题如何理解?:被呼叫方拒绝接收呼叫。
我的代码在运行过程中,有时会出现这样的问题:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.9.1.1
错误所在事件:窗口,窗口1,Button04,Click
详细错误信息:
被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))

程序代码如下:
If str.Contains(",") = False And str.Contains("*") = True Then
                        s1 = str.split("*")
                        dyg = "C" & CStr(row1+1) &":" & Tables("大纲级别").rows(s1(1)+1)(6) & CStr(row1+s1(0)) \'合成地址
                        _app1.worksheets(bm).range(dyg).copy \'复制
                        _app.Selection.Collapse (Direction:=msword.WdCollapseDirection.wdCollapseStart)
                        _app.selection.paste \'粘贴
                        ClipBoard.Clear \'清空剪贴板
end if

上述代码的意思是从EXCEL中复制表格,粘贴到WORD中,这是一个For To  next  中的一节,全部执行完会粘贴100多个表格,200多小段文字。
有时运行到_app.selection.paste \'粘贴   之前会出现上述错误提示。
我到EXCEL文档中看到,目标单元格已被复制了(屏幕显示),但是无法粘贴到WORD中的当前插入点。
而当前插入点在上一个For To  next 循环中,是这样处理的:
                _app.Selection.Typeparagraph ‘插入新段落
                _app.Selection.ParagraphFormat.OutlineLevel = 10 ’大纲级别为正文

关键是上面的代码大部分时候运行正常,程序会不停地在WORD的新段落中写入文字和表格。但只要一出错,就是上面的提示,而且在EXCEL中看那个表已经被复制了,只是无法粘贴到WORD中,整个循环中断。

需要说的是:错误只会出现在粘贴表格时。

大家有这方面的经验吗?希望能指点下?

谢谢!

--  作者:wcs
--  发布时间:2019/9/13 21:00:00
--  
自己顶下!

注:
上面代码中的_app、_app1,是全局代码中定义的:
Public _app As MSWord.Application \'定义一个WORD对象
Public _app1 As MSExcel.Application \'定义一个EXCEL对象

上面的代码用来操作WORD和EXCEL,并将他们与FOXTABLE中的数据直接联系起来。


--  作者:wcs
--  发布时间:2019/9/13 22:35:00
--  
我研究了下,已解决,代码修改为:
try
                        _app1.worksheets(bm).range(dyg).copy \'复制
                        _app.selection.paste \'粘贴
                        ClipBoard.Clear \'清空剪贴板
                        Catch ex As Exception
                        System.Threading.Thread.Sleep(1000)
                        _app1.worksheets(bm).range(dyg).copy \'复制
                        _app.selection.paste \'粘贴
                        ClipBoard.Clear \'清空剪贴板
end try

意思是如果出错,不出现窗口,且程序停1秒,等呼叫,再执行。
我看到有时程序停了一秒,就能执行了。