2016-02-17 2 views
0

В настоящее время я использую приведенный ниже код для копирования вставки диапазона, но он создает действительно большой файл после вставки данных, как я могу изменить это, чтобы скопировать пасту только до последняя активная строка? Или файл становится большим из-за какого-то другого фактора? Новое для VB, любая помощь будет очень признательна.Скопируйте диапазон до lastRow и вставьте в другой лист

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 

ответ

0

Коротким ответ на ваш вопрос:

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.

+0

Спасибо @ Никлас Йоханссон, это прекрасно работает. – GavinJones

2

Размер файла является результатом использования всех столбцов. Этот link охватывает некоторые способы поиска конца целого ряда данных. В ваших подразделах вы можете сделать это:

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 
+0

Это вставка только одной строки? Код должен был изменяться, поскольку данные копируются с WB2.she1 на WB1.CR Details. – GavinJones

+0

Вы правы, это было проблемой. Я исправил это. – Jonathan

Смежные вопросы