【问题标题】:How do I implement ctrl + shift + down in VBA?如何在 VBA 中实现 ctrl + shift + down?
【发布时间】:2016-02-22 16:58:59
【问题描述】:

如何在 excel vba 中执行 ctrl + shift + down?我也想知道然后将其粘贴为特殊值。这是我目前拥有的代码:

Sub CopyCol()

    Sheets("Sheet1").Range("B2").End(xlDown).Select.Copy

    Sheets("Sheet2").Range("B14").PasteSpecial xlPasteValues

End Sub

我正在尝试复制 B 列中的所有内容,而不是整个列本身。例如,如果条目在第 100 行结束,它应该选择单元格 B2 到 B100,就像 ctrl+shift+down 一样。

选择单元格后,我想复制它们并将它们作为值粘贴到单元格 B14 的 Sheet2 中。我知道将.Select 放在(xlDown) 之后会帮助我做到这一点,但是我无法复制单元格。此外,粘贴到另一张纸上也不起作用。

【问题讨论】:

  • 录制宏,然后查看Excel生成的源代码。它应该为您提供所需的一切。
  • 另外,这不是您的问题,但是您可以通过简单地将两个范围的值设置为相等来跳过复制/粘贴(从而避免剪贴板)。 (当您只需要值时,这很有效)。即您帖子中的代码也可以写为[range you want to fill] = [range whose values you want to copy],或Sheets("Sheet2").Range("B14").Value = Sheets("Sheet1").Range("B2").Value

标签: vba excel


【解决方案1】:

你会使用的方法是这样的:

Sheets("Sheet1").Range(Sheets("Sheet1").Range("B2"),Sheets("Sheet1").Range("B2").End(xlDown)).Copy

Range() 对象的工作方式是这样的 Range(Start Cell, End Cell)

所以你用Sheets("Sheet1").Range("B2") 锚定第一个单元格。

并使用Sheets("Sheet1").Range("B2").End(xlDown)) 锚定End Cell。

现在另一种输入更少的方法是使用 With 块:

With Sheets("Sheet1")
    .Range(.Range("B2"),.Range("B2").End(xlDown)).Copy
End with

【讨论】:

  • @Moe - 这也许是学习使用With 来减少重复的好时机,因为(IMO)当你有Sheets("Sheet1") // Sheets("Sheet1").Range("B2") 时它会让人有点难以阅读重复了这么多。编辑:啊,斯科特在我输入评论时想到了这个主意。快问:如果你是With Sheets("Sheet1").Rnage("B2"),那你可以直接.Range(,.End(xldown)).Copy吗?或者你真的需要一些参考资料吗?
  • 完美!我也添加了第二个代码来粘贴,它工作得很好!谢谢!
  • @BruceWayne 是的,正如你评论的那样。
  • @Moe 大约十分钟后,您可以将其标记为正确,请点击答案旁边的灰色/绿色复选标记。这是只有你才能做的事情。
  • @ScottCraner 找到你了,伙计!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
相关资源
最近更新 更多