Проходить по каждой строке на одном листе и копировать в именованные диапазоны другого листа - PullRequest
0 голосов
/ 11 декабря 2018

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

Рабочая книга MACRO является основной рабочей книгой со всеми полями данных на листе «Данные».Книга LEAN содержит определенные точки данных, которые я хотел бы скопировать и вставить в именованные диапазоны на листе «Данные» в книге MACRO до последней доступной строки.

Например:

Рабочая книга макроса содержит столбцы:

Eng #  Eng Name   Date Started     Date Completed    KPI1   KPI2  

100    ABC        12/01/2018       12/10/2018        50    100 

Рабочая книга Lean содержит столбцы:

Eng #   Date Started   Date Completed   KPI#   Score
101     12/02/2018      12/03/2018      1       50
101     12/02/2018      12/03/2018      2       10
102     11/01/2018      11/20/2018      1       100
102     11/01/2018      11/20/2018      4       100

Цель состоит из двух частей:

  1. Извлечение данных из определенных столбцов книги Lean и вставка в лист «Макросы» книги Macro до последней доступной строки
  2. Извлечение KPI # из книги Lean (которая находится встрок) и после счет к именованным диапазонам / столбцам, которые соответствуют KPI # в листе «Данные».

Моя попытка с кодом ниже:

Public Sub GrabLeanFileData()

Dim wbmacro As Workbook
Dim wblean As Workbook

Set wbmacro = Workbooks.Item("MacroFile.xlsm")
Set wblean = Workbooks.Item("Subcontractor CA - KPI's Lean.csv")

Dim wsmacro As Worksheet
Dim wslean As Worksheet

Set wsmacro = wbmacro.Worksheets.Item("Data")
Set wslean = wblean.Worksheets.Item("Subcontractor CA - KPI's Lean")

Dim leanrange As Range
Set leanrange = wslean.Range("A2:A15000")

wblean.Activate

Dim cell As Range

i = 1

For Each cell In leanrange

    If leanrange.Range("A2") <> "E1002" Then
        Range("A2").Offset(i, 0).Value = wsmacro.Range("Enum").Value
        Range("B2").Offset(i, 0).Value = wsmacro.Range("ds").Value
        Range("C2").Offset(i, 0).Value = wsmacro.Range("dc").Value
        Range("D2").Offset(i, 0).Value = wsmacro.Range("kpi1").Value


        i = i + 1
    End If

Next cell

End Sub

Я хотел пропустить тест Eng # из 1002, поэтому я ввел это условие.

1 Ответ

0 голосов
/ 11 декабря 2018

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

Я думаю, что тамздесь две проблемы:

  1. обратный синтаксис в цикле for
  2. вы неэффективно компенсируете

Вот что я бы предложил: так как выИспользуете для каждого цикла, используйте объект cell для циклического прохождения всех ячеек в диапазоне вместо использования смещения.Затем вам нужно сместить строку в вашей макрокоманде, иначе вы просто вставляете одну и ту же строку снова и снова.Вот почему ваши заголовки перезаписываются.Вы можете использовать второй цикл для смещения cell, чтобы вы могли проходить через каждый столбец в leanrange.Наконец, поскольку ваши диапазоны «Enum», «ds», «dc» и т. Д. Выглядят как все смежные столбцы, я упростил задачу, используя j, чтобы также сместить ваши столбцы в рабочей книге макроса.

Dim i As Integer
Dim j As Integer
Dim cell As Range

i = 1
For Each cell In leanrange
    If leanrange.Range("A2") <> "E1002" Then
        For j = 0 To 3
            wsmacro.Range("Enum").Offset(i, j) = cell.Offset(0, j).Value
        Next j
        i = i + 1
    End If
Next cell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...