Может ли кто-нибудь помочь мне написать код в VBA, который обновляет таблицу или добавляет новые данные на основе критериев в двух столбцах?
Например, может быть столбец имени и столбец проекта, и мы хотим проверить, работал ли Марк над проектом1. Если Марк работал над проектом1, обновите его строку новыми данными из отдельной электронной таблицы. Если Марк работал над проектом 2 в отдельной электронной таблице, но это не задокументировано в исходной электронной таблице, добавьте Mark и project2 вместе с информацией из этой строки. Если Бетти работала над проектом 1, и исходная электронная таблица содержит эту информацию, обновите эту строку. Если Бетти работала над проектом 2, но исходная электронная таблица не содержит этой информации, добавьте ее в качестве новой строки. Таким образом, имена И проекты будут появляться в таблице несколько раз, просто с разными комбинациями.
Таким образом, идея состоит в том, чтобы проверять оба столбца одновременно, обновлять и добавлять новые данные соответственно.
Вот неисправный код, который у меня есть сейчас:
Dim filename As String
Dim ManagerLEs As Workbook
Dim ProjectLEs As Workbook
Set ProjectLEs = ThisWorkbook
filename = Application.GetOpenFilename("Word files (*.xlsx),*.xlsx", , "Browse for file containing table to be imported")
If filename = Empty Then
Exit Sub
End If
Set ManagerLEs = Application.Workbooks.Open(filename)
Dim first_blank_row As Long
first_blank_row = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row
starting_row = 4
Dim r As Long
r = starting_row
Dim namefound As Range
Dim projectfound As Range
firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value
Do While firstname <> 0
Set namefound = Columns("a:a").Find(what:=firstname, LookIn:=xlValues, lookat:=xlWhole)
Set projectfound = Columns("d:d").Find(what:=projectname, LookIn:=xlValues, lookat:=xlWhole)
'look for current ticket number in main file
If (namefound Is Nothing And projectfound Is Nothing) Then
'add info to end of main file
For c = 1 To 57
ProjectLEs.Worksheets("Template").Cells(first_blank_row, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
first_blank_row = first_blank_row + 1
Next c
Else
'overwrite existing line of main file
For c = 1 To 57
ProjectLEs.Worksheets("Template").Cells(namefound.Row, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
Next c
End If
r = r + 1
firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value
Loop
Спасибо!