Показать сообщение отдельно
Старый 24.01.2004, 16:16     # 1
PANIC
Guest
 
Сообщения: n/a

Проблема с циклами (как мне кажется :) в 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