Страницы: 1
RSS
VBA метод find вложеный в цикл с методом find
 
Добрый вечер! Помогите плиз. Есть такой цикл с find (в упрощенном виде приведен ниже) суть - найти все ячейки удовлетворяющие условию (равные 1) на листе "ассортимент", найдя ячейку и получив переменную code через Offset найти ее на другом листе и опять через Offset получить еще одну переменную bazprise. Все это сложить на 3-м листе, после чего вернуться на лист "ассортимент" и найти следующую ячейку равную 1
Без вложенного поиска bazprise на другом листе все работает на ура. С вложенным на этапе
Set art = .FindNext(art)
Loop While Not art Is Nothing And art.Address <> firstAddress
art становится равен Nothing и на строке с Loop While... вылазит ошибка Run-Time 91 Object variable or...
Не хватает сил и времени понять где теряется значение art

Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Worksheets("ассортимент").Activate
With Range("a2", "a" & LastRowN)
        Set art = .Find("1")
          If Not art Is Nothing Then
           firstAddress = art.Address
           Do
           code = art.Offset(0, 3)
                          
               Worksheets("прайслист").Activate
                    If Not Range("b7", "b1500").Find(code, LookAt:=xlWhole) Is Nothing Then
                    bazprise = Range("b7", "b1500").Find(code, LookAt:=xlWhole).Offset(0, 3)
                    Else: bazprise = "не найдено"
                    End If
            
           Worksheets("комм").Activate
           ActiveCell = Count + 1
           Count = ActiveCell.Value
           ActiveCell.Offset(0, 6) = (bazprise - (bazprise * 20 / 120)) * curs
           ActiveCell.Offset(1, 0).Activate
           Worksheets("ассортимент").Activate
           Set art = .FindNext(art)
           Loop While Not art Is Nothing And art.Address <> firstAddress
        End If
      End With
Изменено: jfd - 22.08.2013 19:30:17
 
Велосипед изобретаете? ))

Используйте функцию, вызов которой вернёт диапазон, содержащий все найденные ячейки:
http://excelvba.ru/code/FindAll

А потом в цикле перебирайте найденные ячейки:

Код
1
2
3
4
5
6
7
dim ra as range
set ra = FindAll(Worksheets("ассортимент").range("a:a"), "1")
 
    Dim cell As Range
    For Each cell In ra.Cells
 ' обрабатываем очередную найденную ячейку
    Next cell
 
EducatedFool, типа того. С квадратными колесами зато свой.  :D
Страницы: 1
Читают тему
Наверх
Loading...