Добавить новые строки в существующую таблицу из внешних данных без дубликатов - PullRequest
0 голосов
/ 06 декабря 2018

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

Эти работники нанимаются и увольняются много раз.

Я извлекаю отчет (внешние данные с веб-сайта), в котором перечислены имена, идентификаторы и адреса этих работников, которые в настоящее время заняты.

Вместо добавления и удаления строк этих работников вмоя таблица (таблица на листе MASTER), чтобы соответствовать отчету (данные на листе EXTERNAL DATA), я хотел бы добавить строки рабочих из отчета (лист EXTERNAL DATA) в мою таблицу (лист MASTER) автоматически бездубликаты.

Причина, по которой мне нужно добавить всю строку, заключается в том, что у меня есть больше столбцов в таблице (на листе MASTER), чтобы я мог добавить их должность, смену и поощрительную оплату.Поэтому мне нужно удалить всю строку при удалении работника ...

Мне нужен код для добавления строк из таблицы внешних данных (лист EXTERNAL DATA) на одном листе в мою таблицу MASTER на другом листе бездубликаты рабочих.

Теперь этот код отлично работает на моем листе.Я мог бы адаптировать этот код с некоторой помощью ...

`Private Sub Worksheet_Change(ByVal Target As Range)
' Code to move row from FIRED sheet to MASTER sheet when “REHIRED” is 
'selected in column J
  If Target.Column = 2 Then
' The line below is where I should change to something to compare if there 
'is a new number 
'in the "NUMBER" column of the "EXTERNAL DATA" sheet then move the row to  
'the "MASTER" table. 
  If Target = "REHIRED" Then
    Application.EnableEvents = False
    nxtRow = Sheets("MASTER").Range("H" & Rows.Count).End(xlUp).Row + 1
    Target.EntireRow.Copy _
    Destination:=Sheets("MASTER").Range("A" & nxtRow)
    Target.EntireRow.Delete
  End If
 End If
 Application.EnableEvents = True
End If
End Sub`

Надеюсь, это имеет смысл.

1 Ответ

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

Редактировать: обновлено / проверено.Предполагается, что оба набора данных отформатированы как таблицы / списки объектов:

Sub Tester()

    Dim lo As ListObject, loExt As ListObject, lr As ListRow
    Dim rw As Range, shtExt As Worksheet, f As Range, shtMaster As Worksheet
    Dim rwNew As Range

    Set shtExt = Sheets("external data")
    Set shtMaster = Sheets("master")
    Set lo = shtMaster.ListObjects(1) 'or use the table name
    Set loExt = shtExt.ListObjects(1) 'assumes the external data is a listobject

    For Each lr In loExt.ListRows

        'try to find the Id on the master sheet
        Set f = lo.ListColumns(1).Range.Find(lr.Range(1).Value, lookat:=xlWhole)
        If f Is Nothing Then

            'no match: add a new row to the table
            Set rwNew = shtMaster.ListObjects(1).ListRows.Add().Range
            'populate the new row
            rwNew.Cells(1).Value = lr.Range(1).Value
            rwNew.Cells(2).Value = lr.Range(2).Value
            rwNew.Cells(3).Value = lr.Range(3).Value
            'etc transfer any other required values...

        End If
    Next lr

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