gpt4 book ai didi

excel - 在 VBA 中复制粘贴数据的 "correct"方法是什么?

转载 作者:行者123 更新时间:2023-12-03 18:45:31 27 4
gpt4 key购买 nike

在 Excel 中的 VBA 中复制粘贴数据的“正确”方法是什么?

现在,至少据我所知,这三个是唯一可用的方法:

  • (Range) .Copy([Destination]) 方法
  • (Worksheet) .Paste([Destination, Link]) 方法
  • 和 ( Range ) .PasteSpecial([Paste], [Operation], [SkipBlanks], [Transpose]) 方法


  • 现在,我做了我的研究,这些是 利弊 .Copy([Destination]) .Paste([Destination, Link]) 方法,至少那些,我能想到的:

    优点:
  • 允许我们将数据粘贴到与复制相同的表达式中(我猜是代码可读性..?)

  • 缺点:
  • 单元格引用是完全不行的!
  • 您的格式和公式可能会搞砸
  • 如果范围重叠,它将显示一个提示,有效地阻止宏死在其轨道上(这是一个巨大的无赖,特别是如果你试图自动化某些东西)
  • 更糟糕的是,如果你按 Cancel在提示符下,它将抛出 Error **(除非已处理)


  • 在硬币的另一面, .PasteSpecial()

    优点:
  • PasteSpecial()允许我们粘贴范围的特定部分!
  • 它允许我们指定我们想要做的粘贴类型
  • 有一个内置的skipBlankstranspose功能
  • 不是“如此”Error -易于!

  • 我努力想出任何一个,但是:

    缺点:
  • 多写一点字符?


  • 现在,这让我相信, Destination .Copy() 的论点方法本质上应该被忽略, PasteSpecial()应始终使用。

    是否有过使用它可能比 .PasteSpecial() 更可取的情况? ?或者应该PasteSpecial()是每个复制粘贴操作的规范吗?

    最佳答案

    这与可读性或您输入的字符数无关。这是关于您需要实现的目标。

    换句话说,它绝对不是主观的或基于意见的,并且与编程中的几乎所有其他东西一样......

    #这取决于。

    如果您使用 Excel 并复制粘贴单元格,您是 Ctrl+C 和 Ctrl+V 还是使用特殊粘贴?

    取决于你需要做什么。

  • 如果您的意思是复制一个单元格,它的值、格式、数据验证、边框等;然后 .Paste [Destination]是你最好的 friend 。那是 Ctrl+C/Ctrl+V 的编程等价物... 等价于 PasteSpecial/All,因为 .Paste [Destination]在这种情况下,已经完成了您需要做的所有事情。

    Cell references are a complete no go!



    绝对地。硬编码的单元格引用是不好的。 .Paste [Destination]无论如何都不会强制你这样做,所以这一点没有实际意义。

    If the range overlaps it will display a prompt, effectively stopping macro dead in its tracks



    复制和粘贴范围不能重叠,句号。您将通过 .PasteSpecial 获得该提示。也。
  • 如果您要复制单元格的 Value , 但不是 其格式、数据验证、边界等;然后 .PasteSpecial绝对是一个更好的主意,因为这是粘贴特殊/值的程序化等价物 - 除了仅分配单元格的 Value 可能更有效随心所欲(无需往返剪贴板); OTOH 如果你 意味着粘贴格式,或数据验证,或诸如此类,那么这可能是最简单的方法。
  • Paste不会“搞砸”格式。它完全按照它的意思去做。 PastePasteSpecial不是 等价物。为工作使用正确的工具。它们分别是“粘贴”和“特殊粘贴”的程序化等价物 - 如果您在 Excel 中并系统地进行“特殊粘贴”,您将完成您的工作。但是每次你这样做来“粘贴所有”时,你都比你需要的更努力。
    PasteSpecial看起来像一把不错的锤子,但并非所有东西都是钉子。当您可以避免剪贴板写入时,避免它通常是一个好主意...但话又说回来, if you're dealing with huge data sets (想想 100K+ 单元格),它的性能可能比仅仅分配值更好。

    那说:

    @ScottCraner I did think about it, but that's not really copy-pasting, but more of a typical pointer referencing, hence I decided not to include it in my question. I didn't want to open a book to the "what counts as copy-pasting" discussion.



    那是错的。 .Range(foo).Value = .Range(bar).Value不是“典型的指针引用”。它实际上采用了 foo 的值到一个 2D 变量数组中,然后将该 2D 变量数组转储到 bar ,覆盖以前保存的值。因此,它绝对是点击剪贴板的完全有效的替代方法 - 但您需要测试并与 Copy 进行比较+ PasteSpecial看看这是否是适合您情况的最佳(/最有效)解决方案:

    Testing with 1500000 cells (100000 rows)
    Pasting from clipboard, single operation: 324.21875ms
    Setting cell values, single operation: 1496.09375ms


    Testing with 150 cells (10 rows)
    Pasting from clipboard, single operation: 11.71875ms
    Setting cell values, single operation: 3.90625ms
    Pasting from clipboard, iterative: 1773.4375ms
    Setting cell values, iterative: 105.46875ms

    关于excel - 在 VBA 中复制粘贴数据的 "correct"方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51826865/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com