Страницы: 1
RSS
Настройка поиска Find
 
Здравствуйте
Настраиваю поиск в диапазоне через Find таким кодом:
Код
Set Cell = Sheets("БД-типы").Range("B2:B1001").Find(What:=Sheets("БД-типы").Range("AE5").Value, After:=Sheets("БД-типы").Range("B1"), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
Но компилятор ругается на эту строку, подскажите как правильно сделать поиск в диапазоне?
Изменено: web-master - 12.09.2017 16:13:02
 
Что значит 'ругается'? Матом? Или все таки у ошибки какой то конкретный текст?
Согласие есть продукт при полном непротивлении сторон
 
runtime error 13 - type mismatch - ошибка  
Изменено: web-master - 12.09.2017 15:21:18
 
Код
With Sheets("БД-типы")
    Set Cell = .Range("B2:B1001").Find(What:=.Range("AE5").Value, LookIn:=xlValues)
End With
но, если в столбце 'B2:B1001' не будет найдено значение из ячейки 'AE5', то все равно будет ругаться
Согласие есть продукт при полном непротивлении сторон
 
Sanja, как этого можно избежать?
 
Точнее будет ругаться не в этом месте кода, а там, где Вы захотите использовать переменную Cell, если ей не будет присвоино значение
Обрабатывается так
Код
With Sheets("БД-типы")
    Set Cell = .Range("B2:B1001").Find(What:=.Range("A5").Value, LookIn:=xlValues)
End With
If Not Cell Is Nothing Then
    'какой то код типа
    MsgBox Cell.Address
End If
Согласие есть продукт при полном непротивлении сторон
 
Sanja,ясно, все равно не использую ее потом.
Но ошибка не пропала, runtime error 13 - type mismatch
Весь код такой:
Код
'Добавление типа
Public Sub Add_type()
    Dim Cell As Range
    If ActiveSheet.Range("AE5").Value <> "" And ActiveSheet.Range("AE5").Value <> "Введите название типа..." Then
        With Sheets("БД-типы")
        Set Cell = .Range("B2:B10001").Find(What:=.Range("AE5").Value, After:=.Range("B1"), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
        End With
        If Cell Is Nothing Then
            'найдено
            MsgBox "Совпадение"
            ActiveSheet.Range("AE5").Value = Empty
        Else
            'не найдено
            lLastRow = Sheets("БД-типы").Cells(Rows.Count, 2).End(xlUp).Row
            Sheets("БД-типы").Cells(lLastRow + 1, 2).Value = Range("AE5").Value
            ActiveSheet.Range("AE5").Value = Empty
        End If
    Else
        ActiveSheet.Range("AE5").Value = Empty
    End If
End Sub
Изменено: web-master - 12.09.2017 15:38:24
 
web-master, здравствуйте.
Цитата
как этого можно избежать?
1. Изучить "ругания" и пользоваться справочником.
2. Научиться предугадывать возможные конфликты (примеры тут и тут)
Изменено: Jack Famous - 12.09.2017 15:40:05
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
web-master написал: Но ошибка не пропала
Так Вы и не исправили ничего. Сравните мой и Ваш
Где Вы в моем видите After:=.Range("B1") и прочее?
И вот здесь
Код
 If Cell Is Nothing Then
            'найдено
Если  Cell Is Nothing, то это НЕ найдено. В моем примере еще есть Not. Будь внимательнее
Изменено: Sanja - 12.09.2017 15:42:04
Согласие есть продукт при полном непротивлении сторон
 
Ошибка пропала, но почему то все равно выполняется условие "Не найдено"
Код
Public Sub Add_type()
    Dim Cell As Range
    If ActiveSheet.Range("AE5").Value <> "" And ActiveSheet.Range("AE5").Value <> "Введите название типа..." Then
        With Sheets("БД-типы")
        Set Cell = .Range("B2:B10001").Find(What:=.Range("AE5").Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
        End With
        If Not Cell Is Nothing Then
            'найдено
            MsgBox "Совпадение"
            ActiveSheet.Range("AE5").Value = Empty
        Else
            'не найдено
            lLastRow = Sheets("БД-типы").Cells(Rows.Count, 2).End(xlUp).Row
            Sheets("БД-типы").Cells(lLastRow + 1, 2).Value = Range("AE5").Value
            ActiveSheet.Range("AE5").Value = Empty
        End If
    Else
        ActiveSheet.Range("AE5").Value = Empty
    End If
End Sub
Изменено: web-master - 12.09.2017 15:52:59
 
по моему пора файл с кодом показывать. раз выполняется значит найдено. :) или код не точно написан. мы не знаем ваших условий чтобы проверить алгоритм кода.
 
Добавил файл.
Написал не правильно
Всегда выполняется условие "найдено"
 
Нужно БЕЗ точки перед Range в этой строке
Код
...What:=Range("AE5").Value...
Согласие есть продукт при полном непротивлении сторон
 
Sanja, все работает, спасибо
 
П.С.
web-master, в событии Worksheet_Change отключите слежение в начале кода и включите в конце.
Код
Application.EnableEvents = False 'отключаем отслеживание событий
Страницы: 1
Наверх