【问题标题】:PasteSpecial alternatives for better performance?PasteSpecial 替代品以获得更好的性能?
【发布时间】:2019-08-03 13:36:12
【问题描述】:

我有一段代码在将数据从一张纸复制到另一张纸时效率非常低。

Sheets("Repository").PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False

如何在保留选项(xlPastevalues、Operation、SkipBlanks 和 Transpose)的同时以更高效的方式重写上面的这段副本?

使用Sheets("Repository").Copy Destination 似乎并没有保留选项和格式,也不是更有效。

【问题讨论】:

  • 如果你想要更高效,不要使用复制粘贴
  • Sheets("Repository").Range("A1:D100").Value = Sheets("YourSheetName").Range("A1:D100").Value 怎么样?您需要根据代码的需要修改范围
  • 我想了解您所说的“效率极低”是什么意思
  • 哦@PGSystemTester 这个问题是针对OP的。我想了解他所说的“高效”是什么意思:)
  • 好吧,如果我们想真正提高效率,他会学习如何使用数组并钻进兔子洞。谁不喜欢即时构建数据集? :D

标签: excel vba


【解决方案1】:

如果您只是想简单地做xlPasteValues 而不使用任何花哨的东西,比如转置或跳过空格,那么将值设置为等于另一个值可能是最简单和最有效的选择。

A1:B10 sheet1 复制到 Sheet2 中的 D1:E10 列的示例。

Sheets("Sheet2").Range("D1:E10").Value = Sheets("Sheet1").Range("A1:B10").Value

如果您必须进行大量编辑,您可以考虑先将它们插入到数组中,here's an example from a question I asked

另外,在回答评论时我想了解您所说的“效率极低”是什么意思: 使用复制/粘贴会占用您计算机(不是 Excel)的大量开销资源。它必须捕获整个单元格属性、格式、值、公式,并显示行进点。只需设置该值,或找到某种方法来避免使用计算机的 Copy 方法,即可避免开销减慢和大量屏幕更新。

【讨论】:

  • 从技术上讲,应用程序 UI 是保留在前端和后端之间进行额外通信所需的 cpu。因此,虽然您部分正确,但实际上是 Excel 的错:P
  • 我的 VBA 编码的主要罪过/规则/愚蠢的指导方针之一是“不要与应用程序的对象交互(如果可以避免的话)。”这适用于所有支持 vba 的 MS 应用程序。
  • @DougCoats 确实如此。我说“不要碰excel”。你的听起来更复杂。我实际上打算为电子表格大师写一篇关于此的文章。还没搞定。大多数人只是通过循环行/行并在那里进行编辑来生存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
相关资源
最近更新 更多