Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
VBA| Замена фрагмента формул активного диапазона
 
Доброго дня, уважаемые!

Я только-только начинаю постигать таинства ВБА, поэтому выполнение любой команды представляется архисложной задачей. Так что если вопрос ниже - идиотский и сто раз поднимался, прошу сильно не ругаться, т.к. найти ничего не получилось (хотя скорее всего просто криво формулировал).
-----
Записываемый макрос должен заменять во всех формулах определенного диапазона ячеек на всех листах книги определенный фрагмент данных на другой фрагмент (в данном случае имя листа, на который ссылается формула).

Макрос прекрасно справляется со своей задачей за исключением двух моментов:

1. В случае, если первоначальные формулы ссылаются на разные книги, то после запуска макроса все формулы ссылаются на тот адрес книги, на который ссылается формула верхней левой ячейки заданного диапазона
Нутром я понимаю, что все дело в конструкции:
Код
Range("a4:c6").FormulaLocal = Replace(ActiveCell.FormulaLocal, ThisWorkbook.Sheets(1).Cells(2, 2).Formula, ThisWorkbook.Sheets(1).Cells(1, 2).Formula) 
а именно в части:
Код
Replace(ActiveCell.FormulaLocal
однако никак не пойму, как задать замену не активной ячейки, а активного диапазона (надеюсь, сформулировал корректно).
Естественно, необходимо, чтобы после запуска макроса формулы всего диапазона оставались прежними, за исключением заменяемого фрагмента.

2. Кроме этого макрос должен вытаскивать из формулы ячейки определенный фрагмент и вставлять его значение в другую ячейку. Так вот, визуально это значение вставляется только после второго запуска макроса. Не пойму почему.

-------------------------------

Буду благодарен за любой совет!
Изменено: cray - 2 Апр 2015 13:01:51
 
Вопросы, не касающиеся заявленной темы, пожалуйста, в новую.
 
1. Если под активным диапазоном подразумевается выделенный, то вместо ActiveCell используйте Selection

Цитата
cray написал: хочу задать и волнующий, но не относящийся к топику
а вот это зря. Правило: Одна тема - один вопрос
Согласие есть продукт при полном непротивлении сторон.
 
Оу, прощения просим, доп.вопрос убрал.

Sanja, Selection был одним из первых вариантов, которые я пробовал использовать - выдает "runtime error 13 - type mismatch.
Хотя, возможно, не правильно использую.
Пробовал такие варианты:
Код
Selection.FormulaLocal = Replace(Selection.FormulaLocal, ThisWorkbook.Sheets(1).Cells(2, 2).Formula, ThisWorkbook.Sheets(1).Cells(1, 2).Formula)
и
Код
Range("a4:c6").FormulaLocal = Replace(Selection.FormulaLocal, ThisWorkbook.Sheets(1).Cells(2, 2).Formula, ThisWorkbook.Sheets(1).Cells(1, 2).Formula)
Страницы: 1
Читают тему (гостей: 1)