为什么在VBA中粘贴Word表列大多数时候导致错误4605,然后在多次尝试后成功?



我使用VBA宏从Word中的表模板中删除不相关的行。我的表开始时大约有100行。我注意到Word VBA中的表操作在长表上是slooooooow,所以我决定将(少数)相关行复制/粘贴到一个新表中,并删除原始表。这样我只需要复制几行,而不是删除近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)的第一行。行,粘贴后没有任何错误。

谢谢你的建议。在你的输入之后,我研究并尝试了一种完全避免通过剪贴板的方法。瞧,它的工作速度更快,没有bug…

相关代码现在是:

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

这已经经过了很好的测试,现在正在生产中使用。它可以复制合并的单元格、单元格中的内容控件、格式等等。好。

相关内容

最新更新