Зацикливание и копирование / вставка всех строк, равных переменной, в новый файл Excel - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в VBA, поэтому буду очень признателен за любую помощь.После долгого бесполезного поиска я не могу понять, почему мой код не работает.

Чтобы объяснить проблему, у меня есть файл Excel с набором данных, отсортированных по индексу с именем Prod.Type в столбце A.

Вот пример того, что я пытаюсь сделать: enter image description here

Код должен:

в цикле дляпроверьте значение всех строк в Prod.Type, и если проверенная строка равна переменной prodNum, то она копирует строку в новый файл Excel.

В противном случае она закрывает файл, увеличивает значение prodNum и повторяет цикл до полного столбца.был проверен, конечно, он будет создавать новый файл Excel для каждого produNum, который подтверждается.

В результате для prodNum = 2 должны отображаться только заголовок и строки, равные 2

Но в результате я получаю только строку заголовка, получающую вставку

Вот код, который я сделал

Sub test()


   Dim wbtarget As Excel.Workbook
   Dim consh As Worksheet
   Dim prodNum As Long
   Dim i As Long
   Dim shnum As Long

   Set consh = ThisWorkbook.Sheets("Sheet1")

   For counter = 1 To 20

   Set wbtarget = Workbooks.Add
   consh.Rows(1).Copy wbtarget.Sheets(1).Range("A1")
      For i = 1 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
          If Range("A" & i).Value = prodNum Then
              consh.Rows("A" & i).Copy wbtarget.Sheets(1).Range("A2")
                  Else
                  wbtarget.SaveAs "C:\Users\Anon\Desktop\Project\" & shnum & ".xlsx" 'path to save file
                  prodNum = prodNum + 1
                  shnum = shnum + 1
          End If
      Next
   Next counter
End Sub

«Для счетчика = 1 к 20» предназначен для целей тестирования, у меня естьболее 6000 строк данных для копирования и вставки.

Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 30 мая 2018

Ваша ошибка здесь:

consh.Rows("A" & i).Copy wbtarget.Sheets(1).Range("A2")

Это должно быть не rows, а Range:

consh.Range("A" & i).Copy wbtarget.Sheets(1).Range("A2")

или без A:

consh.Rows(i).Copy wbtarget.Sheets(1).Range("A2")
...