复制范围直到lastRow并粘贴到另一个工作表中

我目前使用下面的代码来复制粘贴范围,但是一旦数据被粘贴,它会创build一个非常大的文件,我怎样才能修改这个复制粘贴直到最后一个活动行? 或者是由于其他因素而导致文件变大? 新来VB,任何帮助将不胜感激。

Private Sub CommandButton1_Click() Dim WB1 As Workbook Dim WB2 As Workbook Set WB1 = ActiveWorkbook Set WB2 = Workbooks.Open(WB1.Path & "\RawData.xlsm") WB1.Sheets("CR Details").Columns("A:AW").Value = WB2.Sheets("sheet1").Columns("A:AW").Value WB2.Close End Sub 

你的问题的简短答案是:

 Private Sub CommandButton1_Click() Dim WB1 As Workbook Dim WB2 As Workbook Dim LastRow As Long Set WB1 = ActiveWorkbook Set WB2 = Workbooks.Open(WB1.Path & "\RawData.xlsm") With WB1.Sheets("CR Details") 'Find the last cell's row with data in any column '(You can also use ".Cells(Rows.Count, 1).End(xlUp).row") LastRow = .Range("A:AW").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row 'Copy the values WB2.Sheets("sheet1").Range("A1", "AW" & LastRow) = .Range("A1", "AW" & LastRow).Value End With WB2.Close End Sub 

更详细的解释:

查找最后使用的行的一个非常常见的代码片段是使用:

(将使用列A查找上次使用的行)

 Dim LastRow as Long With ThisWorkbook.Sheets("CR Details") LastRow = .Cells(Rows.Count, 1).End(xlUp).row End With 

将“1”更改为您要查找的列号。

要查找range("A:AW")中任何列中最后使用的单元格的行,则需要如下所示的内容:

 Dim LastRow as Long With ThisWorkbook.Sheets("CR Details").Range("A:AW") LastRow = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row End With 

而已。 罗恩·德·布因(Ron de Buin)有一个很好的解释。 答案也可以在Stack Overflow上find。

文件大小是使用整个列的结果。 这个链接涵盖了一些查找数据范围的方法。 在你的sub你可以这样做:

 Private Sub CommandButton1_Click() Dim WB1 As Workbook Dim WB2 As Workbook Set WB1 = ActiveWorkbook Set WB2 = Workbooks.Open(WB1.Path & "\RawData.xlsm") 'Find the last row with data With WB1.Sheets("CR Details") LastRow = .Range("A" & .Rows.Count).End(xlUp).Row End With WB1.Sheets("CR Details").Range("A1:AW" & LastRow).Copy WB2.Sheets("sheet1").Range("A1").PasteSpecial xlPasteValues WB2.Close End Sub