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

Мне посоветовали опубликовать это как второй вопрос, но это отчасти продолжение моего первого найденного вопроса здесь .

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

Вот так:

Лавуа хранит все свои WO в своем маленьком листе. Он предназначен для того, чтобы вручную обновить «Дата Инспектора очищена», затем нажать кнопку, а затем эта дата копируется и вставляется в столбец R на мастер-листе после сопоставления через WO # (который всегда уникален и никогда не повторяется) с WO # в мастер листе (2018). Изображения ниже (мне пришлось скрыть некоторую конфиденциальную информацию - просто предположим, что это не важно.)

Лист Лавуа: Lavoie

Мастер лист: Master2018

Вот мой код:

Sub dates()

Application.ScreenUpdating = False

Dim AVals As Object: Set AVals = CreateObject("scripting.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 And Len(.Cells(j, 18)) > 0 Then AVals.Add MyName, .Cells(j, 18).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

У меня есть очищенные WO # - почему копирование кода не вставляет эти значения, почему оно пропускается?

1 Ответ

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

данные начинаются со строки 2 или 3, и вы начинаете добавлять записи в словарь и проверять записи в 2018 из строки 18

Измените 18 на правильный ряд в этих строках:

For j = 18 To lastRow1
For i = 18 To lastRow2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...