如何使用Excel中的VBA将列从一个工作表复制到另一个工作表?

exc*_*l34 12 excel vba excel-vba

我正在尝试编写一个宏,将第1列的内容从第1页的第1列复制到第2列.这就是模块的外观,但是,当我运行它时,我得到了

运行时错误9,下标超出范围.

Sub OneCell()
    Sheets("Sheet1").Select
    'select column 1 A1'
    Range("A1:A3").Select

    Selection.Copy
    Range("B1:B3").Select

    ActiveSheet.Paste

    Sheets("Sheet2").Select
    Application.CutCopyMode = False
End Sub
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 27

以下在Excel 2007中对我来说很好.它很简单,并执行完整副本(保留所有格式等):

Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2)
Run Code Online (Sandbox Code Playgroud)

"Columns"返回一个Range对象,因此这是使用"Range.Copy"方法."Destination"是此方法的一个选项 - 如果未提供,则默认为复制到粘贴缓冲区.但是当提供时,它是一种简单的复制方式.

与在Excel中手动复制项目时一样,目标的大小和几何形状必须支持要复制的范围.


gui*_*wer 11

选择通常是不必要的.试试这个

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 这比 David 在 18'12 的回答要快 (2认同)

pax*_*blo 1

我不确定为什么你的下标会超出范围,除非你的工作表实际上没有被调用Sheet1Sheet2。当我将其重命名Sheet2为时Sheet_2,我遇到了同样的问题。

此外,您的一些代码似乎是错误的方式(您在选择第二张纸之前粘贴)。这段代码对我来说效果很好。

Sub OneCell()
    Sheets("Sheet1").Select
    Range("A1:A3").Copy
    Sheets("Sheet2").Select
    Range("b1:b3").Select
    ActiveSheet.Paste
End Sub
Run Code Online (Sandbox Code Playgroud)

如果您不想知道工作表的名称,可以使用整数索引,如下所示:

Sub OneCell()
    Sheets(1).Select
    Range("A1:A3").Copy
    Sheets(2).Select
    Range("b1:b3").Select
    ActiveSheet.Paste
End Sub
Run Code Online (Sandbox Code Playgroud)