Обновить таблицу из справочного листа - PullRequest
1 голос
/ 19 апреля 2019

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

Как в основной таблице, так и в таблице есть значение целевого идентификатора, которое я намеревался использовать для сопоставления. Я хотел бы иметь возможность зацикливаться на базе данных master и выяснять, есть ли соответствующий идентификатор цели в таблице «update», и если это необходимо, мне нужно обновить три столбца в таблице master из соответствующей строки в «update» " Таблица. Я пытался написать этот цикл в VBA, но я застрял на правильном коде (я очень плохо знаком с VBA).

Вот код, который у меня есть:

Sub Button4_Click()
Dim i As Integer
Dim tbl As ListObject
Set tbl = Sheets("Master").ListObjects("MasterTable")

For i = 2 To tbl.Range.Rows.Count

If Sheets("Master").Cells(i, 1) = Sheets("Data Update").Cells(i, 1) Then
Range(Sheets("Data Update").Cells(i, 9), Sheets("Data Update").Cells(i, 11)).Copy
Range(Sheets("Master").Cells(i, 9), Sheets("Master").Cells(i, 11)).PasteSpecial xlPasteValues

ElseIf Sheets("Master").Cells(i + 1, 1) = Sheets("Data Update").Cells(i, 1) Then
Range(Sheets("Data Update").Cells(i, 9), Sheets("Data Update").Cells(i, 11)).Copy
Range(Sheets("Master").Cells(i, 9), Sheets("Master").Cells(i, 11)).PasteSpecial xlPasteValues

End If
Next i

End Sub

Работает только в том случае, если идентификатор цели в таблице «update» находится в той же строке, что и идентификатор цели в таблице «master». Таким образом, если идентификатор цели № 1 находится в строке 1 в обеих таблицах, он будет совпадать, если идентификатор цели № 2 находится в строке 2 в обеих таблицах, он будет совпадать и т. Д. Но он не найдет идентификатор цели, если он не в порядке и это остановит целевые идентификаторы не в последовательном порядке

1 Ответ

0 голосов
/ 19 апреля 2019

Пожалуйста, смотрите:

Sub UpdateTable()

    Dim i As Integer
    Dim tblMaster As ListObject, tblUpdate As ListObject
    Dim valsReturned(1 To 2) As String
    Dim valToFind As String

    With ThisWorkbook
        Set tblMaster = .Sheets("Master").ListObjects("MasterTable")
        Set tblUpdate = .Sheets("Master").ListObjects("UpdateTable")
    End With

    With tblMaster.DataBodyRange
        For i = 1 To .Rows.Count
            'where is ID to find? please update as required
            valToFind = .Cells(i, 1).Value
            If CheckAndGetTableRow(tblUpdate, valToFind, valsReturned) Then
                .Cells(i, 9).Value = valsReturned(1)
                .Cells(i, 11).Value = valsReturned(2)
            End If
        Next i
    End With

End Sub
Function CheckAndGetTableRow(ByRef tblUpdate As ListObject, ByVal valToFind As String, ByRef valsReturned() As String) As Boolean

    Dim i As Integer, tRows As Integer
    Dim success As Boolean

    With tblUpdate.DataBodyRange
        tRows = .Rows.Count
        For i = 1 To tRows
            'Please update if required, now ID is in first column
            If .Cells(i, 1).Value = valToFind Then
                'please update as required
                valsReturned(1) = .Cells(i, 9).Value
                valsReturned(2) = .Cells(i, 11).Value
                success = True
                Exit For
            End If
        Next
    End With

    CheckAndGetTableRow = success

End Function

Спасибо

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