我在公共子(Excel、VBA)中有大约 130 行代码。所有的动作都差不多,而且都很小。以下是一些示例:
' Copy Total Payout Table percentages
Set rngTest = wksTestGames.Range("$S$4:$S$123")
Set rng = wksGames.Range("$S$4:$S$123")
rngTest.Copy
rng.PasteSpecial xlPasteValues
' Copy Team Payout Tables percentages
Set rngTest = wksTestGames.Range("$V$4:$V$123")
Set rng = wksGames.Range("$V$4:$V$123")
rngTest.Copy
rng.PasteSpecial xlPasteValues
' Copy Not Used Payout Tables percentages
' LowNet-C
Set rngTest = wksTestGames.Range("$Y$4:$Y$123")
Set rng = wksGames.Range("$Y$4:$Y$123")
rngTest.Copy
' Copy Card Matching Option
rng.PasteSpecial xlPasteValues
Set rngTest = wksTestGames.Range("TotalGameScoreCardMatching")
Set rng = wksGames.Range("TotalGameScoreCardMatching")
rngTest.Copy
rng.PasteSpecial xlPasteValues
以 rng 开头的变量被标注为范围。如果它们的名称中有 Test,则它们引用源工作簿,否则它们引用目标工作簿。
在测试过程中,第一个复制粘贴通常会成功运行,但第二个复制粘贴会出现 1004 错误。并进入调试器,并在其中包含 xlPasteValues 的语句处停止。继续单击 F5 或 F8 会使语句成功,但下一个包含 xlPasteValues 的语句也会以同样的方式失败。几乎所有 4 个语句组都会出现这种情况。 当我使用错误处理程序 L_E1004 时,失败没有循环。但一些编码错误导致了无休止的循环。 这似乎是一个计时问题,我的代码超出了运行时并导致失败。 有没有办法喘口气,比如休息一毫秒,让运行时有时间跟上? 我正在做一些困难的事情吗?
预先感谢您的任何建议。
如果您创建一个子进程来管理“复制值”过程,这种类型的重复操作会变得更清晰:
Sub Tester()
CopyValues wksTestGames.Range("S4:S123"), wksGames.Range("S4")
CopyValues wksTestGames.Range("V4:V123"), wksGames.Range("V4")
CopyValues wksTestGames.Range("Y4:Y123"), wksGames.Range("Y4")
CopyValues wksTestGames.Range("TotalGameScoreCardMatching"), _
wksGames.Range("TotalGameScoreCardMatching")
End Sub
'copy values from `rngFrom` into same-size range with top-left cell `rngTo`
Sub CopyValues(rngFrom As Range, rngTo As Range)
With rngFrom
rngTo.Cells(1).Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
End Sub