Страницы: 1
RSS
Найти и заменить часть формулы в активной ячейке
 
Хочу в VBA найти и заменить часть формулы в активной ячейке

С помощью автоматической записи макроса сгенерирован код, но при запуске выдает ошибку
                 "Run-time error '91':"
"Object variable or With block variable not set"      

подскажите что не так?          
Код
Sub Макрос()

' Найти и заменить част формулы в активной ячейке

    Range("I7").Select
    ActiveCell.Replace What:="Справочник!$AC:$AE;2;0", Replacement:= _
        "Справочник!$AC:$AE;3;0", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _
        :=False, SearchFormat:=False, ReplaceFormat:=False
    Cells.Find(What:="Справочник!$AC:$AE;3;0", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
End Sub
Изменено: Igor-K65 - 16.11.2016 16:25:22
 
Это значит, что вторая строка только ищет значение. И не находит. Т.к. не находит - не может активировать. Вот и получаете ошибку...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
VBA по-другому видит формулу, чем пользователь, это можно посмотреть так: выделите ячейку с формулой и примените код:
Код
activecell.Formula

Вы увидите, что между параметрами функции не точка с запятой, а запятая. Поэтому нужно так:
Код
Sub Макрос()
 
' Найти и заменить част формулы в активной ячейке
 
    Range("I7").Select
    ActiveCell.Replace What:="Справочник!$AC:$AE,2,0", Replacement:= _
        "Справочник!$AC:$AE,3,0", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _
        :=False, SearchFormat:=False, ReplaceFormat:=False
    Cells.Find(What:="Справочник!$AC:$AE,3,0", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
End Sub

Да, и Вы не заметили, что у Вас не произошло замены 2 на 3?
 
а замените так:
Код
Sub Макрос()
    activecell.formulalocal = replace(activecell.formulalocal, "E;2;0", "E;3;0")
End Sub
Изменено: Ігор Гончаренко - 16.11.2016 17:12:02
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Karataev написал:
Karataev
Спасибо за ответы, да я заметил что нет изменений с 2 на 3, вот только было непонятно почему сам эксель записывает некорректно код.  
Страницы: 1
Читают тему
Наверх