Страницы: 1
RSS
Изменение формулы в "проверке вводимых значений", c помощью VBA
 
Требуется провести замену в формулах в "проверке вводимых значений" с помощью макроса. Пример:
Код
 =ЕСЛИ(ИЛИ($H$2="тест1";$H$2="тест2");именованный диапазон1;именованный диапазон2)

нужно получить
=ЕСЛИ(ИЛИ($H$2="test1";$H$2="test2");range1;range2)

Таких формул около 50шт.
Цель всего этого, перевод книги с русского на английский. С переводом именованных диапазонов уже разобрался, осталось с этими формулами.
Спасибо за любую помощь.
 
Если формула заранее неизвестна, то придется чутка заморочиться. Сделал пример на одной ячейке:
Код
Sub changeValidationFormula()
    Dim s$, ss$, ialertstyle As XlDVAlertStyle, ioperator As Long, itype As XlDVType
    With Range("A1").Validation
        s = .Formula1
        itype = .Type
        ialertstyle = .AlertStyle
        ioperator = .Operator
        .Delete
        s = Replace(Replace(Replace(s, "тест1", "test1"), "диапазон1", "range1"), "диапазон2", "range2")
        ss = Range("A1").Formula
        Range("A1").FormulaLocal = s
        s = Range("A1").Formula
        Range("A1").Formula = ss
        .Add itype, ialertstyle, ioperator, s
    End With
End Sub
Но если все проверки созданы одинаково(либо условие создавалось для всех сразу, либо распространялось копированием ячейки или условия), то по идее должны быть связаны и может быть имеет смысл попробовать сделать так:
1. выделить ячейку с проверкой данных
2. изменить формулу
3. установить галочку "распространить изменения на другие ячейки с таким же условием".
4. Ок
Изменено: Дмитрий(The_Prist) Щербаков - 11.01.2020 16:42:38
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
"распространить изменения на другие ячейки с таким же условием" не получится т.к. есть ячейки с проверками которые ссылаются на строки в которых они находятся. Спасибо за помощь. Буду пробовать
 
Цитата
serjj22 написал:
т.к. есть ячейки с проверками которые ссылаются на строки в которых они находятся
это не проблема, кстати. Главное, чтобы созданы они были копированием одной и той же ячейки и не изменялись после этого копирования. Формула при этом может отличаться в части ссылок на другую строку, т.к. в стиле R1C1 формула неизменна.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,можно добавить параметр xlWhole, чтобы замена осуществлялась только при полном соответствии?
 
Я так понимаю справка и поиск не работают? :) в функции Replace в данном случае нельзя. Хотя я не понимаю как он по Вашему должен работать. Ведь берется входная строка, ищется в указанном тексте и заменяется на заданный. Какой еще тут xlWhole? Что он должен делать? Разве сейчас не полное соответствие ищется? Если заданная строка найдена - будет замена. Не найдена - не будет. Может имелось что-то другое, например, регистр?
Изменено: Дмитрий(The_Prist) Щербаков - 11.01.2020 17:07:47
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх