Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 15:28   #1
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
Печаль поиск значения ячейки по диапазону

Всем доброго времени суток,
Блондинок, конечно, лучше не подпускать к макросам, но уж так вышло
В общем пишу. Никак не могу разобраться как работает функция FIND. нужно найти ячейку с заданным значением vValue в диапазоне A3:A25000
прилагаю кусок программы, выдает ошибку run time error 5.
Заранее благодарна за объяснения

Set cForFind = Range("A3:A25000") ' Range where to find in Article/document register
With cForFind
Set C = .Find(What:=vValue, After:=.Cells("A3"), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) '.Activate
Set cStart = C
While Not C Is Nothing
Set C = .FindNext(C)
If C.Address = cStart.Address Then
C.Select
Else
MsgBox "done"
Exit Sub
End If
Wend
End With
With C:
MsgBox "ura3"
End With
Exit Sub
Othergirl вне форума Ответить с цитированием
Старый 24.10.2011, 15:50   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

У меня Error 1004 из-за .Cells("A3")
Можно написать After:=.Range("A3"), ошибки не будет, но это будет означать, что Find будет искать ячейку после A5.
Вы действительно этого хотите? Может, аргумент After просто опустить, тогда поиск пойдет после первой ячейки диапазона?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 24.10.2011, 15:52   #3
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
По умолчанию

В общем то я этого и хочу, но не могу понять как ее пропустить.Пробовала убрать все, оставить только .Find(What:=vValue), тогда виснет надолго....
там просто несколько книг завязаны

Последний раз редактировалось Othergirl; 24.10.2011 в 15:55.
Othergirl вне форума Ответить с цитированием
Старый 24.10.2011, 15:55   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Просто не писать
Код:
Set C = .Find(What:=vValue, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 24.10.2011, 15:56   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Ну почему же... макросы и блондинкам поддаются (если постараться)

Код:
Sub test()
    vValue = "деталь"
    
    Dim Ячейка As Range
    Set Ячейка = Range("a3:a25000").Find(vValue, , xlValues, xlPart)

    If Ячейка Is Nothing Then
        MsgBox "Не нашли", vbExclamation
    Else
        MsgBox "Нашли в ячейке " & Ячейка.Address
    End If
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 24.10.2011, 16:05   #6
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
По умолчанию

Ваш вариант работает намного лучше, что неудивительно
Попробую дальше адаптировать.
СПАСИБО
Othergirl вне форума Ответить с цитированием
Старый 24.10.2011, 17:30   #7
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
По умолчанию Рано было радоваться

Адаптировала под свои нужды ваше сообщение, и один раз все даже отрабатывает без проблем, но сделать цикл никак не выходит. Перепробовала уже все до чего додумалась. Пожскажите, пожалуйста, где косяк.

Код:
Sub Test3 (fill out names/description from archive)
            ActiveSheet.Range("C6").Select
            iArchive = "G:\Archive\ReformTech_Number_Register.xlsx"
            iAR = "Article register"
            iDR = "Document register"
            vValue = ActiveCell.Value
                 
                 Workbooks.Open Filename:=iArchive, ReadOnly:=True
                       
                       'add if open, do not open again
                       
                       
30                    Dim cForFind As Range
                       If vValue < 500000 Then                                              'works
                            Worksheets(iDR).Select
                            Else
                            Worksheets(iAR).Select                                        'works
                        End If
               
                   Set cForFind = Range("a1:a25000").Find(vValue, , xlValues, xlPart)
    
                        If cForFind Is Nothing Then
                            MsgBox "Art/Doc not found", vbExclamation
                        Else
                            ThisWorkbook.Activate
                            ActiveCell.Offset(0, 2) = cForFind.Offset(0, 1)
                            ActiveCell.Offset(0, 3) = cForFind.Offset(0, 2)
                        End If
                        
                        ActiveCell.Offset(1, 0).Select
                        If IsEmpty(ActiveCell.Value) = False And IsEmpty(ActiveCell.Offset(1, 0).Value) = False Then
                            vValue = ActiveCell.Value
                            Workbooks(iArchive).Select
                            GoTo 30
                            Else: ActiveSheet.Range("C6").Select
                        End If
                    Exit Sub


'Exit Sub  Test2

Последний раз редактировалось Othergirl; 25.10.2011 в 11:08.
Othergirl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск по диапазону и подстановка значения в зависимости от результата Propinol Microsoft Office Excel 17 02.04.2012 21:35
Поиск значения ячейки в другой, содержащей значение первой в общем тексте onenures Microsoft Office Excel 16 03.03.2012 11:49
поиск значения ячейки двар Microsoft Office Excel 2 04.04.2011 12:12
Поиск по критерию и изъятие значения ячейки правее madex Microsoft Office Excel 8 24.02.2011 15:48
Как организовать поиск значения ячейки по всем листам alec Microsoft Office Excel 7 01.05.2010 17:01