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

我正在尝试编写一个macros,将第1列中的第1列的内容复制到第2列中的第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) 

“列”返回一个Range对象,所以这是利用“Range.Copy”方法。 “Destination”是此方法的一个选项 – 如果未提供,则默认情况下将复制到粘贴缓冲区。 但提供时,这是一个简单的方法来复制。

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

select往往是不必要的。 尝试这个

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

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

另外,你的一些代码似乎是错误的(你在select第二张之前粘贴)。 这段代码适合我。

 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