使用excel-vbamacros将信息从前6行的特定列中复制并粘贴到另一个工作簿中

所以,我需要从一个工作簿的特定列中复制信息,并将此信息粘贴到另一个工作簿的特定列中。 我已经通过编写下面的代码成功完成了这个工作:

Sub test() Dim wb As Workbook Dim mysh As Worksheet Dim sourceColumn As Range Dim targetColumn As Range Dim i As Long Set wb = Workbooks("WorkbookA.xlsm") 'Above code is same as yours Set mysh = wb.Sheets(1) 'if only one sheet, use loop otherwise mysh.Range("J1").AutoFilter Field:=10, Criteria1:=">=" & Date Application.ScreenUpdating = False Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Columns("D") Set targetColumn = Workbooks("WorkbookB.xlsm").Worksheets(1).Columns("B") sourceColumn.Copy Destination:=targetColumn Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Columns("C") Set targetColumn = Workbooks("WorkbookB.xlsm").Worksheets(1).Columns("C") sourceColumn.Copy Destination:=targetColumn Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Columns("G") Set targetColumn = Workbooks("WorkbookB.xlsm").Worksheets(1).Columns("D") sourceColumn.Copy Destination:=targetColumn Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Columns("J") Set targetColumn = Workbooks("WorkbookB.xlsm").Worksheets(1).Columns("E") sourceColumn.Copy Destination:=targetColumn Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Columns("K") Set targetColumn = Workbooks("WorkbookB.xlsm").Worksheets(1).Columns("F") sourceColumn.Copy Destination:=targetColumn Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Columns("L") Set targetColumn = Workbooks("WorkbookB.xlsm").Worksheets(1).Columns("G") sourceColumn.Copy Destination:=targetColumn Application.ScreenUpdating = True End Sub 

我特别想做的是从WorkbookA的前6个可见logging中复制和粘贴这些信息。这些logging不是来自(单元格编号1到6)

目前来自所有行的信息正在被复制和粘贴。

如何以适当的方式修改代码来正确执行此操作?

而不是columns使用range来定义您要复制的单元格的数量。

 Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Range("D1:D6") Set targetColumn = Workbooks("WorkbookB.xlsm").Worksheets(1).Range("B1:B6") sourceColumn.Copy Destination:=targetColumn 

不推荐使用Columns因为这对VBA来说是一项耗时的任务。 单个列可以是一个+ 1M的单元格。 这将需要Excel很多时间来处理。

sourceColumntargetColumn需要被定义为range

编辑1:现在你已经根据你的评论过滤,你可能想试试这个:

定义一个variables来获取源列的最后一行数据。 像D列:

 Dim LastRow as Long With Workbooks("WorkbookA.xlsm").Worksheets(1) LastRow = .Cells(.Rows.count, "D").End(XlUp).Row End With 

现在我们要从源列中获取可见单元格的范围。 这个步骤只会在应用filter之后显示可见的单元格( 我已经排除了D1,因为它应该是列的标题

 Set sourceColumn = Workbooks("WorkbookA.xlsm").Worksheets(1).Range("D2:D" & lastrow).SpecialCells(xlCellTypeVisible) 

我们将简单地通过源列的单元集合,并告诉在目标工作簿中只粘贴6个单元格:

 Dim counter as integer: counter = 1 With Workbooks("WorkbookB.xlsm").Worksheets(1) For each cell in sourcecolumn if counter = 7 then Exit for end if .Range("B" & counter) = cell.value counter = counter + 1 Next End With 'Counter = 0 do forget to reset it if you're going to use it for the other columns 

testing和工作:)