如何在 VBA 中实现 ctrl + shift + down?

7

在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行结束,则应以与ctrl + shift + down相同的方式选择单元格B2到B100。
选定单元格后,我想将它们复制并作为值粘贴到Sheet2的B14单元格中。我知道在(xlDown)之后放置.Select会帮助我做到这一点,但是那样我就无法复制单元格。另外,粘贴到其他工作表也不起作用。

1
记录一个宏,然后查看Excel生成的源代码。它应该会提供你所需的一切。 - Ken White
另外,这不完全是你的问题,但你可以通过将两个范围的值设置为相等来跳过复制/粘贴(从而避免使用剪贴板)。 (当您只想要值时,这很有效)。 例如,您在帖子中的代码也可以编写为[要填充的范围] = [要复制值的范围]Sheets(“Sheet2”).Range(“B14”).Value = Sheets(“Sheet1”).Range(“B2”).Value - BruceWayne
1个回答

17

您会使用的方法是:

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

Range() 对象的工作方式如下:Range(起始单元格, 结束单元格)

因此,您可以使用 Sheets("Sheet1").Range("B2") 锚定第一个单元格。

并使用 Sheets("Sheet1").Range("B2").End(xlDown)) 锚定结束单元格。

现在,另一种更简洁的方法是使用 With 块:

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

2
@Moe - 这可能是一个很好的时机去学习使用With来减少重复,因为(在我看来)当你反复使用Sheets("Sheet1") // Sheets("Sheet1").Range("B2")时,它会让阅读有点困难。编辑:啊,Scott在我打评论的时候已经有这个想法了。快速问题:如果你做了With Sheets("Sheet1").Rnage("B2"),那么你只需要.Range(,.End(xldown)).Copy吗?还是你实际上需要一些引用呢? - BruceWayne
1
太好了!我添加了第二段代码进行粘贴,它完美地运行了!谢谢你! - Moe
1
@BruceWayne 是的,我在你评论时正在输入那个。 - Scott Craner
1
@Moe 大约十分钟后,您将能够将其标记为正确答案,请通过单击答案旁边的灰色/绿色复选标记来执行此操作。这是只有您可以完成的操作。 - Scott Craner
1
@ScottCraner 我明白你的意思了,伙计! - Moe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接