vba - 为什么在VBA中粘贴Word表格列大部分时间都会导致错误4605,然后尝试多次成功?
问题描述
我正在使用 VBA 宏从 Word 中的表格模板中删除不相关的行。我的表有大约 100 行开始。我注意到 Word VBA 中的表操作在长表上很慢,所以我决定将(少数)相关行复制/粘贴到一个新表中,并删除原始表。这样我只需要复制几行,而不是删除近 100 行。
我遇到了一个需要帮助才能理解的怪癖。
当我在我的表上运行下面的代码时,它总是在第二行上抛出错误 4605,在Newrow.range.paste
. 根据睡眠持续时间,代码会失败多次,最后才能成功。睡眠 500 毫秒 34 次失败,0 毫秒 96 次失败,200 毫秒 66 次失败,依此类推。
For Each OldRow In TestTbl.Rows
If Models.Contains(OldRow.Cells(1).Range.Text) Then '(meaning it's relevant to copy)
Set NewRow = NewTbl.Rows(NewTbl.Rows.Count)
On Error Resume Next
Do
Err.Clear
OldRow.Range.Copy
Sleep 500 'ms
NewRow.Range.Paste
If Err <> 0 Then
Sleep 200 'ms
Debug.Print "Failed to paste row " & OldRow.Index & " from TestTbl with error " & Err & " at " & Now()
End If
Loop Until Err = 0
On Error GoTo 0
End If
Next OldRow
有人可以帮我弄清楚如何在第一次尝试时粘贴整行,而不是在尝试 30 秒后?
这只发生在满足的第一行if models.contains(Oldrow...text)
。之后的行被粘贴而没有任何错误。
解决方案
谢谢你的建议。在您输入后,我研究并尝试了一种完全避免通过剪贴板的方法。瞧,它工作得更快而且没有错误......
相关代码现在是:
For Each OldRow In TestTbl.Rows
If Models.Contains(OldRow.Cells(1).Range.Text) Then
Set NewRow = NewTbl.Rows(NewTbl.Rows.Count)
NewRow.Range.FormattedText = OldRow.Range.FormattedText
End If
Next OldRow
这已经很好地测试并且现在用于生产。它设法复制合并的单元格、单元格中的内容控件、格式以及所有内容。好的。
推荐阅读
- java - 将容器连接到mysql数据库并访问它
- angular - show navigation only in inner pages and not on login/registration pages
- flutter - 如何实现 Flutter 功能
- gmail-api - 请Gmail API html帖子示例
- java - 识别来自 git 存储库的参数更改
- android - Multiple checkbox state
- unit-testing - How to implement stub in Golang? And what difference between stub and mock?
- python - 如何获得shopify商店产品
- c# - sqlreader reading wrong column
- java - 通过Java中的构造函数调用没有实例的方法