【发布时间】:2021-07-21 16:47:50
【问题描述】:
我一直在寻找在 excel vba 宏中多次使用 .PasteSpecial 的解决方案。 我的报告有时可能有数千行。在这些报告中有两列,我需要合并这些列,以便如果一列有空白,我想要第二列的值;否则,只需将值保留在第一列中。我需要在两个不同的地方应用两次。这一切都隐藏在一个更大的代码中。
我的解决方案是使用带有“跳过空白”的 .PasteSpecial。 excel处理速度很快,比逐行循环快得多。问题是代码不断崩溃excel。
调试后,这是我到目前为止所学到的: *第一个 .PasteSpecial 始终有效,但当它到达第二个 .PasteSpecial 时,它总是失败。 *我在第一个 .PasteSpecial 之后尝试了 STOP,然后单步执行代码,在我单步执行第二个.PasteSpecial 之后,代码工作得很好。 *如果我单步执行第二个 .PasteSpecial,它的工作原理就像没有任何问题一样 - 但如果我像正常一样运行代码,它就会崩溃。 *我在代码中切换了两个 .PasteSpecials 的顺序。当我这样做时,它不再在有问题的 .PasteSpecial 上崩溃,但它确实在最初工作的 .PasteSpecial 上崩溃。
基于此,我知道问题是 Excel 不喜欢 .PasteSpecial 在代码中两次。仍然找不到解决方法。我试过清空剪贴板,但我不知道如何设置一个数组,更不用说对这么多数据有效了。有人知道解决方案或解决方法吗?
这是我的 .PasteSpecial 代码:
MainSheet.Range("N:N").Copy
MainSheet.Range("P:P").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=True, Transpose:=False
MainSheet.Range("R:R").Copy
MainSheet.Range("Q:Q").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=True, Transpose:=False
【问题讨论】:
-
如果您尝试手动复制 / PasteSpecial 会发生什么?
-
你有没有试过把
Application.CutCopyMode=False放在两个复制/粘贴操作之间? -
你也需要复制格式吗?
-
如果我尝试手动操作它就可以了。我试过 Application.CutCopyMode=False ,它仍然崩溃。我也不需要格式化。
标签: excel vba crash copy copy-paste