Словарь VBA для поиска, сопоставления и вставки: неизвестная ошибка - PullRequest
0 голосов
/ 10 мая 2018

Хорошо, поэтому я вытащил этот код из здесь , и пытался адаптировать его с небольшим успехом.Я могу просто неправильно понять оригинал или пропустить какой-то другой фундаментальный недостаток (например, возможно, код был написан для более старой итерации Excel).

У меня есть мастер-лист (2018) с множеством разных строк с различными заданиями, назначенными инспектору.У каждой задачи в столбце G есть уникальный номер, и инспектор может иметь более одной задачи, но ни у одной задачи не может быть более одного инспектора.Колонка G уникальна - цифры не повторяются.Каждый инспектор имеет свой собственный лист, который обновляется с использованием разных таблиц Excel - листы инспектора форматируются точно так же, как и главный лист, все столбцы одинаковы.Инспектор поместит дату на своем листе, задача завершена (дата указана в столбце R), и я пытаюсь использовать этот код, чтобы, когда инспектор завершил задачу и вставил дату, он щелкнули эта дата копируется в столбец R на главном листе в правильной строке, которая соответствует правильному номеру задачи.

Примерно так: copyPaste

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, который мешает мне даже увидеть, работает он или нет.Кроме того, иногда задача еще не назначена, и у вас есть задачи, назначенные, но не выполненные.Я не хочу, чтобы это стерло чьи-либо данные, только добавляйте данные, когда номер задачи совпадает.Имеет ли это смысл?

1 Ответ

0 голосов
/ 10 мая 2018

Заменить эту строку:

If Len(MyName) > 0 Then AVals.Add MyName, .Cells(j, 7).Value

с этим:

If Len(MyName) > 0 And Len(.Cells(j, 18)) > 0 Then AVals.Add MyName, .Cells(j, 18).Value
...