Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中复制粘贴多列_Vba_Excel - Fatal编程技术网

在VBA中复制粘贴多列

在VBA中复制粘贴多列,vba,excel,Vba,Excel,我正在尝试将所选列从一个工作簿的工作表复制到另一个工作簿的工作表。共有10列,但我只需要复制4列,然后将它们粘贴到另一列中。这是密码 Sub CopyCoverage() Dim x As Workbook Dim y As Workbook Dim rng As Range Dim LastRow As Long Dim NextRow As Long Set x = Workbooks.Open("C:\testing\abc.xlsm") Set y = ThisWorkbook x

我正在尝试将所选列从一个工作簿的工作表复制到另一个工作簿的工作表。共有10列,但我只需要复制4列,然后将它们粘贴到另一列中。这是密码

Sub CopyCoverage()

Dim x As Workbook
Dim y As Workbook
Dim rng As Range
Dim LastRow As Long
Dim NextRow As Long

Set x = Workbooks.Open("C:\testing\abc.xlsm")
Set y = ThisWorkbook

x.Worksheets("Sheet1").Activate  // Here I need to select just 4 columns but it selects everything
Range("A65536").Select
ActiveCell.End(xlUp).Select
LastRow = ActiveCell.Row

Range("A2:A" & LastRow).Copy y.Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 0)
Range("B2:B" & LastRow).Copy y.Worksheets("Sheet1").Range("e65536").End(xlUp).Offset(1, 0)
Range("H1:H" & LastRow).Copy y.Worksheets("Sheet1").Range("g65536").End(xlUp).Offset(1, 0)
Range("I1:I" & LastRow).Copy y.Worksheets("Sheet1").Range("i65536").End(xlUp).Offset(1, 0)
Application.CutCopyMode = False

End Sub

我如何用一般语法来写呢?谢谢。

为什么不先尝试使用更好的范围规格?您可以删除查找最后一行的代码

Application.Intersect(Range(Cells(2, 1), Cells(ActiveWorksheet.Rows.Count, 1)), ActiveSheet.UsedRange).Copy
上面的代码将选择A列中的所有数据,无论它是否连续。在“单元格”函数中更改第二个坐标以更改列。所以单元格1,1=A1,单元格2,1=A2,单元格1,2=B1,等等

接下来,您需要在单独的一行中激活此工作簿。比如:

y.Activate
y.Sheets("Sheet1").Activate
Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1,0).Select
ActiveSheet.Paste
然后返回并执行其他三列:

x.Activate
Application.Intersect(Range(Cells(2, 2), Cells(ActiveSheet.Rows.Count, 2)), ActiveSheet.UsedRange).Copy
y.Activate
y.Sheets("Sheet1").Activate
Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Offset(1,0).Select
ActiveSheet.Paste
等等,直到你高兴为止。希望有帮助!
Matt,通过ExcelArchitect.com尝试不使用。选择并激活单元格

Sub CopyCoverage()

Dim x As Worksheet, y As Worksheet, LastRow&

Workbooks.Open ("C:\testing\abc.xlsm")

Set x = Workbooks("abc.xlsm").Worksheets("Sheet1")
Set y = ThisWorkbook.Worksheets("Sheet1")

LastRow = x.Cells.SpecialCells(xlCellTypeLastCell).Row

x.Range("A2:A" & LastRow).Copy y.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
x.Range("B2:B" & LastRow).Copy y.Cells(Rows.Count, "E").End(xlUp).Offset(1, 0)
x.Range("H1:H" & LastRow).Copy y.Cells(Rows.Count, "H").End(xlUp).Offset(1, 0)
x.Range("I1:I" & LastRow).Copy y.Cells(Rows.Count, "I").End(xlUp).Offset(1, 0)

Application.CutCopyMode = False

End Sub

此外,如果表格是动态的,则列可能不在其必须的位置,例如,B列中的数据已转移到C列,则您可以使用.find方法获取标题中需要复制的所需列搜索

无需在单独的行中激活此工作簿,用户3812709以适当的方式执行此操作,结果将是相同的,但更少coding@phil652你推荐什么?