Страницы: 1
RSS
Замена значений с помощью .find
 

Ребят, подскажите, что я делаю не так.
В столбце "A" представлены числовые значения от 5 знаков и значение "Нет".
Небольшой макрос для замены значений отрабатывает корректно, но, заменив последнее значение, не может выйти из цикла.

Почему?
Или возможно стоит искать именно числовые значения как-то иначе?

Код
Sub Find()

Set oTwb = ThisWorkbook
Set oSh1 = oTwb.Sheets(1)
With oSh1.Range("A2:A20")
    Set c = .Find("????*", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstResult = c.Address
        Do
            c.Value = "Да"
            Set c = .Find("????*", After:=c, LookIn:=xlValues)
        Loop While Not c Is Nothing And c.Address <> firstResult
    End If
End With

End Sub
Изменено: mistical - 24.01.2018 15:21:14
 
Для начала уберите цифру заменяющую букву в вашем нике - это нарушает правила форума, иначе модераторы скроют всю помощь. Ну и честно говоря, я не шарю в VBA, но , мне кажется, что и моих познаний в ТрупоПаскале 15 летней давности хватает чтобы увидеть причину зацикленности. Ждем корректировки ника.
Изменено: PooHkrd - 24.01.2018 15:19:04
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
увидеть причину зацикленности
Код выходит из цикла - но с ошибкой
Run-time error '91'
Object variable or With block variable not set
 
Код
Sub Find()
Dim c As Range
Dim firstResult As String
'Set oTwb = ThisWorkbook
'Set oSh1 = oTwb.Sheets(1)
With Range("A1:A20")
    Set c = .Find("????*", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstResult = c.Address
        Do
            c.Value = "Да"
            Set c = .Find("????*", After:=c, LookIn:=xlValues)
        Loop While Not c Is Nothing 'And c.Address <> firstResult
    End If
End With
End Sub
 
Цитата
Kuzmich написал:
Loop While Not c Is Nothing
То есть нужно было просто объявить переменные, чтобы закрыть цикл, опираясь на длину значения?
Хитро - спасибо!
 
Цитата
mi5tical написал:
Или возможно стоит искать именно числовые значения как-то иначе?
Можно просто заменить
Код
    range("A2:A20").Replace What:="????*", Replacement:="Да", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Изменено: Казанский - 24.01.2018 15:46:21
 
Цитата
c.Address <> firstResult
Не работает, т.к. вы заменили значение с на "Да" и макрос уже не найдет ячейку с firstResult
 
Цитата
Казанский написал:
Можно просто заменитьКод ? 123    range("A2:A20").Replace What:="????*", Replacement:="Да", LookAt:=xlWhole, _        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _        ReplaceFormat:=False
Насколько я помню, replace будет искать в диапазоне именно значение "????*", а не значения от 4 знаков и более  
 
mistical, память - штука ненадежная, а проверить очень просто: Ctrl+H...
Страницы: 1
Наверх