Хорошо, поэтому я вытащил этот код из здесь , и пытался адаптировать его с небольшим успехом.Я могу просто неправильно понять оригинал или пропустить какой-то другой фундаментальный недостаток (например, возможно, код был написан для более старой итерации Excel).
У меня есть мастер-лист (2018) с множеством разных строк с различными заданиями, назначенными инспектору.У каждой задачи в столбце G есть уникальный номер, и инспектор может иметь более одной задачи, но ни у одной задачи не может быть более одного инспектора.Колонка G уникальна - цифры не повторяются.Каждый инспектор имеет свой собственный лист, который обновляется с использованием разных таблиц Excel - листы инспектора форматируются точно так же, как и главный лист, все столбцы одинаковы.Инспектор поместит дату на своем листе, задача завершена (дата указана в столбце R), и я пытаюсь использовать этот код, чтобы, когда инспектор завершил задачу и вставил дату, он щелкнули эта дата копируется в столбец R на главном листе в правильной строке, которая соответствует правильному номеру задачи.
Примерно так: ![copyPaste](https://i.stack.imgur.com/gGusJ.png)
I 'я использую этот код для работы с формулой, такой как индексное совпадение или vlookup (слишком много данных, и рабочая книга предназначена для людей, которые не знают, как перетаскивать формулу при добавлении новых записей).
Sub dates()
Application.ScreenUpdating = False
Dim AVals As New Dictionary
Dim i As Long, j As Long, lastRow1 As Long, lastRow2 As Long
Dim sh_insp, sh_2018 As Worksheet
Dim MyName As String
Set sh_insp = Activesheet
Set sh_2018 = Sheets("2018")
With sh_insp
lastRow1 = .Range("A:A").Rows.Count 'last row in spreadsheet
lastRow1 = .Cells(lastRow1, 7).End(xlUp).Row 'last used row in column G
'load the AVal dict
For j = 18 To lastRow1
MyName = .Cells(j, 7).Value
If Len(MyName) > 0 Then AVals.Add MyName, .Cells(j, 7).Value
Next j
End With
With sh_2018
lastRow2 = .Range("A:A").Rows.Count
lastRow2 = .Cells(lastRow2, 7).End(xlUp).Row 'last used row in column G
For i = 18 To lastRow2
MyName = .Cells(i, 7).Value
If AVals.Exists(MyName) Then
.Cells(i, 18).Value = AVals.Item(MyName)
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
Я получаю «Определяемый пользователем тип, не определенный» на Dim AVals as New Dictionary
, который мешает мне даже увидеть, работает он или нет.Кроме того, иногда задача еще не назначена, и у вас есть задачи, назначенные, но не выполненные.Я не хочу, чтобы это стерло чьи-либо данные, только добавляйте данные, когда номер задачи совпадает.Имеет ли это смысл?