繁体   English   中英

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

[英]How can I copy columns from one sheet to another with VBA in Excel?

我正在尝试编写一个宏,将第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

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

Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2)

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

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

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

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub

除非你的纸张实际上没有被称为Sheet1Sheet2否则我不确定为什么你会得到超出范围的下标。 当我将Sheet2重命名为Sheet_2 ,我遇到了同样的问题。

另外,你的一些代码似乎是错误的方法(你在选择第二张表之前粘贴)。 这段代码对我来说很好。

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

如果您不想知道调用哪些工作表,可以使用整数索引,如下所示:

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

如果你有合并的单元格,

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub

它不会按原样复制单元格,以前的代码会像它们看起来一样复制(合并)。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range, r As Range
  Set rng = Intersect(Target, Range("a2:a" & Rows.Count))
  If rng Is Nothing Then Exit Sub
    For Each r In rng
      If Not IsEmpty(r.Value) Then
        r.Copy Destination:=Sheets("sheet2").Range("a2")
      End If
    Next
  Set rng = Nothing
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM