当前位置: 首页 > 知识库问答 >
问题:

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

郎慎之
2023-03-14
    null

现在,我做了我的研究,以下是.copy([Destination]).paste([Destinathtml" target="_blank">ion,Link])方法的优缺点,至少是我能想到的那些:

  • 允许我们在复制时以相同的表达式粘贴数据(我想是代码可读性..?)
  • 单元格引用完全禁止!
  • 格式和公式可能会搞乱
  • 如果范围重叠,它将显示一个提示,有效地阻止宏停止运行(这是一个巨大的障碍,尤其是当您试图自动化某些东西时)
  • 更糟糕的是,如果在提示符上按取消,它将抛出错误**(除非处理)
  • pastespecial()允许我们粘贴范围的特定部分!
  • 它允许我们指定要执行的粘贴类型
  • 具有内置的skipblankstranspose功能
  • 不是“so”错误

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

  • 还要写一些字符吗?

现在,这使我相信,.copy()方法的destination参数实际上应该被忽略,而应该始终使用pastespecial()

是否有过这样的情况,它的使用可能比.pastespecial()更好?还是pastespecial()应该是每个复制粘贴操作的规范?

共有1个答案

韦阳晖
2023-03-14

这与可读性或键入多少字符无关。而是关于你需要实现什么。

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

如果使用Excel并在周围复制粘贴单元格,您是使用Ctrl+CCtrl+V还是使用粘贴专用?

取决于你需要做什么。

>

  • 如果您打算复制单元格,请说明它的值、格式、数据验证、边框等;那么.paste[Destination]就是您最好的朋友。这是Ctrl+C/Ctrl+V...等效于pastespecial/all,因为.paste[Destination]已经完成了本例中需要它完成的所有工作。

    单元格引用是完全不行的!

    绝对的。硬编码单元格引用是错误的。.paste[Destination]并不强制您这样做,所以这一点没有意义。

    如果范围重叠,它将显示一个提示,有效地停止宏在其轨道上死亡

    上面说:

    @ScottCraner我确实考虑过,但这不是真正的复制粘贴,而是典型的指针引用,因此我决定不在我的问题中包括它。我不想打开一本书来讨论“什么算复制粘贴”。

    那是不对的。.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
    

  •  类似资料:
    • 我需要对SAP做一个大规模的改变。因此,我想有一个宏,复制3个不同的列从excel到sap(约3000行) 销售订单#-数据1-数据2 从excel复制销售订单-执行事务处理/NVA02-粘贴 在excel中复制数据1-在Sap中粘贴 在excel中复制数据2-在Sap中粘贴 下一个销售订单等直到最后一行 excel工作表将由多人用户使用,例如活动工作簿将比路径更有帮助 你能帮我提供一个VBA代码

    • 问题内容: 我使用带有文本区域(JTextArea)的Swing创建了一个应用程序。我想创建一个“编辑”菜单,其中包含从文本区域剪切和复制文本,以及将剪贴板中的文本粘贴到文本区域的选项。 我已经看到了几种方法来做到这一点,但是我想知道最好的方法是什么。我应该如何执行剪切/复制/粘贴? 问题答案: 我个人会选择重复使用标准的剪切,复制和粘贴操作。在Swing拖放教程中对此进行了说明:添加剪切,复制和

    • 下面列出了完整的代码,我正在将数据透视表中DB10单元格的数据复制到Checklist表中的第N列--还要注意Checklist表中的行是动态的,每周增长3018行...这是减慢处理时间的部分(我对其进行了计时,在运行代码时完成处理需要大约8分钟)这部分是减慢处理速度的地方: 完整代码:

    • 注意: Adobe Muse 不再添加新增功能,并将于 2020 年 3 月 26 日停止支持。有关详细信息和帮助,请参阅 Adobe Muse 服务结束页面。 对于网站设计人员来说,一致的设计和样式可能是网站最重要的要求之一。为实现这一目标,您可以重复使用样式,或者通过控件栏手动调整格式。手动设置仅适用于小型网站,重复次数受到限制。但是,手动设置格式或使用样式面板复制样式都要耗费时间和精力。此外

    • 问题内容: 我的.emacs中有(cua-mode t),因此Cc是复制的,而Cv是粘贴的,就像桌面上的其他大多数程序(Ubuntu,Gnome,Linux)一样。但是,Emacs似乎并未与其他程序共享剪贴板/复制缓冲区。 例如,如果我在Firefox中使用Cc,则可以将SCv粘贴到终端中,或者将Cv粘贴到gedit中。但是,如果我在emacs中使用Cv(或Cy),则无法获得从Firefox复制的

    • 当我使用Visual Studio Code复制和粘贴一段代码时,在按回车键创建新行后,会发生以下情况: 它似乎保留了新行创建的缩进,并在其顶部添加了复制的代码片段中的先前信息。我宁愿代码在粘贴上自动美化。 可以通过设置更改此行为吗? 编辑:我不是指跨平台复制粘贴,而是指在Visual Studio代码中复制和粘贴同一文件。