2015-08-19 2 views
0

У меня был код, отправленный ниже, но не могу заставить его работать.Скопируйте целую строку из 1 листа в другую

Sub mybus() 
    Dim x As Long 

    x = 2 

    'start the loop 
    Do While Cells(x, 1) <> "" 
     'look for data with "bus" 
     If Cells(x, 1).Value = "bus" Then 
      'copy the entire row if it contains bus 
      Workbooks("book1").Worksheets("Sheet1").Rows(x).Copy 
      'Go to sheet 2 activate it, we want the data here 
      Workbooks("book1").Worksheets("Sheet2").Activate 
      'Find the first empty row in sheet2 
      erow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
      'paste the data here 
      ActiveSheet.Paste Destination:=Worksheets("sheet2").Rows(erow) 
     End If 
     'go to sheet1 again and activate it 
     Worksheets("Sheet1").Activate 
     x = x + 1 

    Loop 
End Sub 
+0

Не копировать/вставлять, а отвечать, вам нужно «Назначение: = Рабочие листы (« лист2 »). Строки (erow + 1)' – findwindow

+0

Возможный дубликат [Как скопировать строки из одного листа excel в другой и создать дублирования с использованием VBA?] (http://stackoverflow.com/questions/12837297/how-to-copy-rows-from-one-excel-sheet-to-another-and-create-duplicates-using-vba) – Jeeped

+0

@ findwindow - 'erow' уже привязан к новой пустой строке с использованием свойства [Range.Offset] (https://msdn.microsoft.com/en-us/library/office/ff840060.aspx). – Jeeped

ответ

2

Range .Activate method Избегайте использования и Worksheet.Activate method в целом. Вам нужно указать только первую ячейку в многоэлементной пасте.

Sub mybus() 
    Dim x As Long, erow As Long 

    x = 2 

    With Workbooks("book1").Worksheets("Sheet2") 
     erow = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
    End With 

    With Workbooks("book1").Worksheets("Sheet1") 
     Do While Cells(x, 1) <> "" 
      'look for data with "bus" 
      If Cells(x, 1).Value = "bus" Then 
       'copy the entire row if it contains bus to Sheet2's erow 
       .Rows(x).Copy _ 
        Destination:=.Parent.Worksheets("sheet2").Cells(erow, 1) 
       'sequence erow to a new blank row 
       erow = erow + 1 
      End If 
      x = x + 1 
     Loop 
    End With 

End Sub 

См How to avoid using Select in Excel VBA macros для более методов на получение от полагаться на выбор и активировать для достижения ваших целей.

+0

Я был близок = P Я знал, что это связано с увеличением урожая. Редактировать: Я удивлен, что вы сохранили копию/вставку. Почему бы просто не поставить строку в строку? Разве это не так быстро? – findwindow

+1

Вы никогда не знаете, что приведение форматирования имеет важное значение и. Передача по передаче не сделает этого. Если OP использует копию, я придерживаюсь ее; если это Copy, Paste Special, Values, то я перехожу к передаче стоимости. – Jeeped

+0

Научите меня быть похожими на вас ~ – findwindow

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