#excel #vba #replace #excel-formula
#excel #vba #заменить #excel-формула
Вопрос:
Я попытался заменить значение строковой формы, чтобы создать формулу:
Ячейка:
"XY=(TRIM(CONCATENATE(AH11, AH12)))"
Теперь я использую классическую функцию replace в VBA:
Cells.Replace What:="XY", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
При записи этого с помощью macro recorder это работает, и появляется формула, но при повторном запуске с помощью макроса это не работает.
Кто-нибудь знает почему?
Вся причина этого в том, что я создал «Создатель формул», который должен создать формулу на основе выпадающего списка, и это результат конкатенации выпадающего списка.
Спасибо!
Комментарии:
1. Что происходит или не происходит? Вы неявно отрабатываете
ActiveSheet
— было бы неплохо указать рабочую книгу / worksheet передCells
.2. Таким образом, вы можете воспроизвести его, имея только один лист и формулу со строкой перед «=». Теперь запишите Marco, чтобы заменить его. Это работает, но при попытке применить макрос снова это не работает.
3. Интересно то, что я могу заменить его любым другим значением. Таким образом, замена XY на YX работает, но не XY даром.
Ответ №1:
На первый взгляд выглядит нормально, проблема не сразу очевидна.
Несколько вещей, которые нужно попробовать:
- MatchByte — проверьте этот параметр — маловероятно, что причиной является сохраненный параметр.
- Попробуйте удалить последний аргумент
FormulaVersion:=xlReplaceFormula2
и посмотрите, что произойдет - Убедитесь, что «ячейки» ссылаются на объект range в вашем варианте использования (т. е. вы или ваш код переходите к ожидаемому листу, содержащему вашу ячейку, когда достигается эта строка вашего кода VBA).
- Подтвердите, что подстрока «XY» действительно является частью отображаемого значения вашей ячейки, а не ее формата. Вы можете сделать это в VBA, получив, например,
Range($A$1).value2
(где «$ A $ 1» — это ссылка на вашу ячейку). Или вы можете сделать это в Excel, установив в другой ячейке формулу «= $ A $ 1», а затем отформатировав ее в general.
Исходя из вашего вопроса, я бы не ожидал, что что-либо из этого будет проблемой, но публикую здесь на случай, если это поможет устранить неполадки.
Ответ №2:
У меня возникла следующая проблема: я записал поиск / замену на свой компьютер, он выдал команду с «FormulaVersion:=xlReplaceFormula2». Я встроил это в свой макрос, и он отлично работал. Я установил свой макрос на другой компьютер, и команда find / replace каждый раз приводила к прерыванию макроса на этом компьютере, хотя на моем он работал нормально.
На втором компьютере я записал команду поиска / замены и обнаружил, что она записана без элемента «FormulaVersion:=xlReplaceFormula2». Итак, я удалил ее из своего макроса. Теперь оба компьютера работают нормально.