imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 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
 
Старый 24.01.2004, 20:20     # 2
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
где определяется значение hnp ?
по ней идёт основной цикл
вообще добавь себе в шапку модуля Option Explicit - много полезного увидишь при компиляции
SapeR вне форума  
Старый 02.02.2004, 12:12     # 3
aBc
Junior Member
 
Регистрация: 16.01.2004
Сообщения: 89

aBc Путь к славе только начался
Вообще-то в Excel-е есть очень полезное для тебя свойство рабочего листа UsedRange (задействованная область).
Вот как определяется последняя строка, содержащая текст:

Код:
  Dim ws As Worksheet
  Dim n As Integer
  Set ws = Worksheets("Лист1")
  n = ws.UsedRange.Row
aBc вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 12:50.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.