Проблема с циклами (как мне кажется :) в Vba
Люди, помогите чайнику, плз!
Пишу макрос для 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, 8) = Sheets("База").Cells(l, 7)
Sheets("Опубликовать").Cells(kolvo_nepustih2, 9) = Sheets("База").Cells(l, 8)
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
|