从一个工作簿复制代码范围并将该范围粘贴到另一个工作簿中第一次尝试失败,但只需在调试器中按 F5 即可成功

问题描述 投票:0回答:1

我在公共子(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 时,失败没有循环。但一些编码错误导致了无休止的循环。 这似乎是一个计时问题,我的代码超出了运行时并导致失败。 有没有办法喘口气,比如休息一毫秒,让运行时有时间跟上? 我正在做一些困难的事情吗?

预先感谢您的任何建议。

excel vba
1个回答
0
投票

如果您创建一个子进程来管理“复制值”过程,这种类型的重复操作会变得更清晰:

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
© www.soinside.com 2019 - 2024. All rights reserved.