Member 12694104 Ответов: 1

Excel VBA автоматически копирует строку на новый лист


У меня есть исходный лист1 с именем (Sales), который содержит данные по каждой строке (один по высоте).
Sheet1 содержит именованный диапазон (ItemName (A2:A100)), который будет обновлять свои данные из веб-API каждые 10 минут в одну и ту же строку. Макет ниже столбцов листа 1
    A        B         C     D      E
1 ItemName  Sale date Cost  Sold  %Gain
2 Item1     1/1/2017   .50  1.00   100%
3 Item2     1/2/2017   .50  1.00   100%
4 Item3     1/1/2017   .50  1.00   100%
ETC.


У меня уже есть целевые листы, созданные/названные (ItemName1,2,3,4) на основе столбца A (именованный диапазон) "ItemName" из исходного листа.

Я пытаюсь обновить целевой лист данными исходного листа для каждого элемента после обновления исходного листа каждые 10 минут. когда исходный лист обновляется из веб-API, данные обновляются в той же строке элемента. это означает, что на исходном листе не создаются новые строки.

я хочу обновить информацию о целевом листе в следующей пустой строке.

Проблема ниже заключается в том, когда (Set copyRow = wsSource.Range(namesArr(i, 1)).EntireRow) при попытке копирования я получаю "ошибку, определяемую приложением или объектом."

Заранее благодарю за помощь.

Что я уже пробовал:

Private Sub myProc()

Dim wb As Workbook
Dim wsSource As Worksheet
Dim wsNames As Worksheet

Set wb = ThisWorkbook
Set wsSource = wb.Worksheets("Sales")
Set wsNames = wb.Worksheets("Names")

Dim namesArr()
namesArr = wsNames.Range("A2:A" & wsNames.Cells(wsNames.Rows.Count, "A").End(xlUp).Row).Value

Dim i As Long
Dim currLastRow As Long


Application.ScreenUpdating = False
Dim copyRow As Range

For i = LBound(namesArr, 1) To UBound(namesArr, 1)

   With wb.Worksheets(namesArr(i, 1))

     Set copyRow = wsSource.Range(namesArr(i, 1)).EntireRow

     currLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

      .Rows(currLastRow + 1).Value = copyRow.Value2

   End With

Next i

Application.ScreenUpdating = True

End Sub

Richard MacCutchan

Используйте функцию отладки Excel, чтобы узнать, каковы значения всех переменных и какая из них вызывает проблему - скорее всего, какое-то значение используется для построения Range(namesArr(i, 1)).

1 Ответов

Рейтинг:
11

Maciej Los

Я бы посоветовал вам прочитать это: Копирование данных между листами Excel с помощью VBA[^]