Пишу макрос для EXcel, но он не работает. Подозреваю, что это из-за неправильного написания цикла, но как правильно это сделать пока не имею представления

Макрос запускается, но ничего не делает, при этом он не выдает никаких сообщений об ошибках.
Public knp As Integer
Public Sub CommandButton1_Click()
Dim i
Dim n As Integer
Dim a
Dim b
Dim kolvo_nepustih As Integer
Dim kolvo_nepustih2 As Integer
Dim kolvo_nepustih3 As Integer
Dim key As Integer
Dim m As Integer
Dim l As Integer
Dim o As Integer
n = 1
m = 1
l = 1
o = 1
'Определяем количество непустых ячеек в листе
For i = 1 To 50000
If Sheets("Новый прайс").Cells(n, 7) = vbNullString Then
knp = n
Exit For
End If
n = n + 1
Next i
otvet.Caption = knp
'Закончили определять количество непустых ячеек
'Начинаем Поиск совпадений ключа с листом "База". Если ячейка с ключом есть в базе, то проверить, не изменились ли значения в некоторых ячейках строки по сравнению с тем, что есть в листе "Опубликовано на сайте". Если изменения есть, перенести значения из листов "База" и "Новый прайс" на лист "Опубликовать", если нет - внести запись в лист "Протокол". Если записи нет, внести данные из листа "Новый прайс" в лист "Новые поступления!"
For i = 1 To hnp
key = Sheets("Новый прайс").Cells(m, 7)
For a = 1 To 50000
If key = Sheets("База").Cells(l, 16) Then
For b = 1 To 50000
If key = Sheets("Опубликован на сайте").Cells(o, 16) And Sheets("Опубликован на сайте").Cells(o, 1) = Sheets("Новый прайс").Cells(m, 4) And Sheets("Опубликован на сайте").Cells(o, 11) = Sheets("Новый прайс").Cells(m, 14) Then
'kolvo_nepustih = Sheets("Протокол").Cells.[a1].CurrentRegion.Rows.Count + 1
Sheets("Протокол").Cells(kolvo_nepustih, 1) = key
Sheets("Протокол").Cells(kolvo_nepustih, 2) = "Без изменений"
Else: kolvo_nepustih2 = Sheets("Опубликовать").Cells.[a1].CurrentRegion.Rows.Count + 1
Sheets("Опубликовать").Cells(kolvo_nepustih2, 1) = "update"
Sheets("Опубликовать").Cells(kolvo_nepustih2, 2) = Sheets("Новый прайс").Cells(m, 4)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 3) = Sheets("База").Cells(l, 2)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 4) = Sheets("База").Cells(l, 3)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 5) = Sheets("База").Cells(l, 4)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 6) = Sheets("База").Cells(l, 5)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 7) = Sheets("База").Cells(l, 6)
Sheets("Опубликовать").Cells(kolvo_nepustih2,

Sheets("Опубликовать").Cells(kolvo_nepustih2, 9) = Sheets("База").Cells(l,

Sheets("Опубликовать").Cells(kolvo_nepustih2, 10) = Sheets("База").Cells(l, 9)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 11) = Sheets("База").Cells(l, 10)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 12) = Sheets("Новый прайс").Cells(m, 14)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 13) = Sheets("База").Cells(l, 12)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 14) = Sheets("База").Cells(l, 13)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 15) = Sheets("База").Cells(l, 14)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 16) = Sheets("База").Cells(l, 15)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 17) = Sheets("База").Cells(l, 16)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 18) = Sheets("База").Cells(l, 17)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 19) = Sheets("База").Cells(l, 18)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 20) = Sheets("База").Cells(l, 19)
Exit For
End If
o = o + 1
Next b
Else: 'kolvo_nepustih3 = Sheets("Новые поступления").Cells.[a1].CurrentRegion.Rows.Count + 1
Sheets("Новые поступления!").Cells(kolvo_nepustih3, 1) = "insert"
Sheets("Новые поступления!").Cells(kolvo_nepustih3, 2) = Sheets("Новый прайс").Cells(m, 4)
'Надо дописать
Exit For
End If
l = l + 1
Next a
Exit For
l = l + 1
Next i
end sub