网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月18日漏签0天
vba吧 关注:17,090贴子:66,952
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 68回复贴,共1页
<<返回vba吧
>0< 加载中...

求助:selection.paste出现4605错误

  • 只看楼主
  • 收藏

  • 回复
  • jetamour90
  • 江湖少侠
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
当使用for循环调用range数组进行复制粘贴时,会随机地在循环进行到3或4次的时候报错。
注1:这样的错误不一定每次运行都发生。
注2:逐语句运行F8目前没有出现报错的情况。
求教错误发生的原因和解决办法!感谢!


  • DwcCC
  • 人中龙凤
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
宏代码选手的通病!
先百度 关闭自动计算 和 屏幕刷新 看看
不行的话 就试着 舍弃 select selection 这类的代码
复制的话 cells.copy cells


2026-01-18 09:40:36
广告
不感兴趣
开通SVIP免广告
  • xyundata
  • 自成一派
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
粘贴前加个插入新段落试试


  • jetamour90
  • 江湖少侠
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
问题以一种奇怪的方式解决了:
0. 如果增加on error resume next,4605错误出现的for周期后的循环也同样会报错。
1. 首先,由于我需要移动的段落可能包含图片和表格,无法使用range.text或range.formattedtext的方法代替range.copy/cut-paste实现段落的移动。
2. 其次,由于错误的随机性,将程序逻辑从cut→paste改成了copy→paste→if not err→delete。防止因为剪切段落未成功粘贴从而从文档消失。
3. 最后,解决方案如下:在模块开头声明kernel32.dll的Sleep函数,并在4605错误发生时用Sleep函数使程序待机一段时间后,重新尝试复制粘贴。代码后附。
----------------------------------------------------------------
出于不为人知的原因,我设置的等待时间越长,发生4605错误的for周期越少。最后当把Sleep时间设定为40000毫秒时,第一次错误仍会出现错误,但在Sleep后,重新尝试复制粘贴成功,且后面的循环不再报错。
猜测sub过程在执行时,剪贴板有时候会出错/崩溃。需要(一次性地)等待一段时间,使剪贴板修复/重启。这个时间不确定,在我电脑上大约是25~40秒之间。
----------------------------------------------------------------
附1:Sleep函数的声明代码
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
附2:修改后的sub过程代码
vArr(i).tAnsRng.Copy
vTmpRng.Paste
If Err.Number = 4605 Then
Debug.Print vArr(i).tQueInd & "出现错误4605"
Sleep 40000 ' 等待时间越少,错误且无法修复的次数越多
Err.Clear
vArr(i).tAnsRng.Copy
vTmpRng.Paste
If Err.Number = 4605 Then ' 等待后二次尝试
Err.Clear
Debug.Print "错误未修复"
Else
vArr(i).tAnsRng.Delete
End If
Else
vArr(i).tAnsRng.Delete
End If
----------------------------------------------------------------
感想1:吐了,以后从业务层面尽量避免复制粘贴吧。
感想2:跑复杂的宏好慢啊,是电脑配置跟不上了吗...?


  • tmtony
  • 吧主
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1.会不会复制 的内容 太多,电脑也需要处理一段时间。需要等待,要加sleep
2.会不会在这个过程有其它 程序(或一些监控程序 对剪切板有处理动作)?


  • arpcn2
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
遇到了同样的问题,换了一种方法。把复制的文本保存到变量中,然后打出变量:
Dim TX As String
'………
Selection.Copy
TX = Selection.Text
Selection.TypeText Text:=TX


  • tobeBT
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
换成doevents试试,select范围太大的话计算机来不及运行完这个指令,vba已经开始下一句指令了


  • tobeBT
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
按F8逐句有就有时间完成指令


2026-01-18 09:34:36
广告
不感兴趣
开通SVIP免广告
  • Excel搭档
  • 人中龙凤
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
电脑配置问题,不确定是不是内存不够。
加延时应该可以


  • lxlzmh2002
  • 人中龙凤
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
4605是对象的方法或属性不可用。哪个方法?paste方法,哪个对象?section对象。selection对象的贴粘动作为什么不可用? 瞅啥瞅我问你呢,程序执行到这为啥不能粘了?你动手手工粘一下不行吗?要么copy、cutt与paste之前的代码使copy效果消失了,要么所选对象不支持copy, paste. 这还有什么疑问吗


  • ISD_狮子座
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
只想问问,出错时,selection是什么内容?


  • 壹统_天下
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我是打开word文件第一次运行到新建word文件,粘贴用selection.paste会报4605错误,然后点调试,再运行就成功了。
此时不关闭这个word文件,再继续运行都不会报错了,但是每次新打开就会报错,在selection.paste之前加一个MsgBox就不报错了,但是这样会有个弹窗也很不爽


  • 聊吧草
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我这边也遇到这个问题,试了楼上说的msgbox弹窗,确实可以。我尝试了另一个办法也可以实现,doevents可以强势刷新系统。用法加上on error resume next,粘贴指令后面加一个判断,如果err.number<>0,则进入循环执行三行的doevents,然后再次粘贴,并执行err.clear,亲测有效。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 68回复贴,共1页
<<返回vba吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示