Вложено для циклов и операторов If - сопоставление переменных и проводка значений со смещением - PullRequest
0 голосов
/ 03 марта 2020

Я постараюсь быть максимально ясным. Вложенные циклы предназначены для go через исправленный столбец InTbl и поиска любой ячейки со значением в.

Затем она также предназначена для l oop через каждую строку таблицы кодов активов через второй столбец списка (специально для кода актива) и проверить его по коду актива во входной таблице (со ссылкой на строку i)

Как только он найдет строку с ссылкой на код актива, соответствующую ссылке i, он должен опубликовать значение из исправленного столбца в смещение ячейки таблицы Asset.

Основная проблема, которую я получаю, заключается в том, что ни одно из значений не копируется, думаю, что-то не так в части код

   For c = 1 To LastAss
         If AsTbl.DataBodyRange(c, 2).Value = InTbl.DataBodyRange(i, 4).Value Then
            AsTbl.DataBodyRange(c, 2).Offset(0, 6).Value = InTbl.DataBodyRange(1, 4).Value

         End If

      Next

Но я не могу сказать, какой бит неправильный.

В любом случае, пожалуйста, найдите мой код ниже, есть какие-нибудь идеи? или это должно быть сделано иначе?

Dim InTbl As ListObject, i As Long, LastRow As Long, AmendedCCY, AsTbl As ListObject, c As Long, AssCode As Range, LastAss As Long 'Defines all variables

Set InTbl = ThisWorkbook.Sheets("Input").Range("Input").ListObject ' Sets inTbl as the input table's data without headings
Set AmendedCCY = InTbl.ListColumns(4).DataBodyRange ' Sets variable as spcifically the amended column in the input table
Set AsTbl = ThisWorkbook.Sheets("Asset List").Range("AssListTab").ListObject 'Sets variable as the full asset table
Set AssCode = AsTbl.ListColumns(2).DataBodyRange
LastRow = AmendedCCY.Rows.Count 'Sets variable as the number of rows in the data range of the input table (or as the number of assets)
LastAss = AssCode.Rows.Count

    For i = 1 To LastRow 'For each iteration from one to the number of all rows.

        If Not IsEmpty(InTbl.DataBodyRange(i, 4).Value) Then 'If the cell in the amended column is not empty then
          For c = 1 To LastAss
             If AsTbl.DataBodyRange(c, 2).Value = InTbl.DataBodyRange(i, 4).Value Then
                AsTbl.DataBodyRange(c, 2).Offset(0, 6).Value = InTbl.DataBodyRange(1, 4).Value

             End If

          Next
        End If

    Next 'Go to next iteration


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...