Страницы: 1
RSS
Копирование формул с помощью VBA в указанные ячейки по событию. Помогите.
 
Прошу помощи у гуру и просто знатоков.  
 
Есть Excel файл (см.приложение), в котором на одном листе размещено 12 одинаковых таблиц (по одной на каждый месяц). По сути, этот лист – часть большого внутрифирменного отчета.  
 
Изначально заполнена формулами только девятая строчка, причем только две ячейки в каждой таблице: таблица «январь» B9 и I9,  таблица «февраль» K9 и R9,  таблица «март» T9 и AA9, и так далее... (в файле отмечены желтым цветом)  
 
В макросе к листу прописаны событие и условия выполнения, но нет главного - того, в чем разобраться пока никак не можем – блока, копирующего:  
1. в таблице «январь» - формулы из ячеек B9 и I9 в ячейки B* и I* при изменении (событие Change) ячейки С*. (то есть в ячейки (0;-1) и (0;6) относительно редактируемой ячейки в столбце С).  
2. в таблице «февраль» - формулы из ячеек K9 и R9 в ячейки K* и R* при изменении (событие Change) ячейки L *. (то есть в ячейки (0;-1) и (0;6) относительно редактируемой ячейки в столбце L).  
2. в таблице «март» - формулы из ячеек T9 и AA9 в ячейки T* и AA * при изменении (событие Change) ячейки U*. (то есть в ячейки (0;-1) и (0;6) относительно редактируемой ячейки в столбце U).  
 
Также прошу посмотреть весь скрип, есть ли там какие-то недочеты?  
Всем помогающим огромное спасибо!
 
С грехом пополам и помощью удалось сделать табличку, чтобы заполнялось формулами, как и хотелось при редактировании целевой ячейки.  
Однако возникла существенная проблема.  
 
При копировании (допустим из другой таблички) добавляются формулы только в ячейки с активной строкой, другие же строки (несмотря на то, что целевая ячейка изменилась) никак не отреагировали.  
 
Помогите пожалуйста разобраться. Большое СПАСИБО.
 
Если кому-то непонятно, то переформулирую.  
 
При ручном редактировании или копировании ячейки из другой таблицы макрос срабатывает нормально. Однако, когда есть необходимость скопировать группу строк, допустим из другой таблицы, формулы копируются в ячейки B* и I* только для одной строки, тогда как по сути ведь изменили свое значение в столбце С несколько ячеек.  
Может быть мы неправильно выбрали событие Change, а может быть допустили ошибку (недочет) в сам текст процедуры.  
Возможно это происходит из-за переменной myKontrCell, которой присваивается значение target (то есть ячейки, где стоит курсор).  
 
Тогда может быть есть возможность присвоить что-то другое? Допустим диапазон ячеек, которые подверглись изменению.  
 
ПОЖАЛУЙСТА, помогите мне, я в глубоком замешательстве.  
(файл см.выше)
 
Максим, в Ехс есть чудесное свойство/функция автозаполнение.  
Я действительно не могу понять ЧТО и как ВАМ надо, но с такими различными исходными данными - только так.  
Тarget - с английского цель/ячейка гда произошло событие. Вокруг нее все и происходит. Когда Вы вводите вручную - макрос упрощает ввод.  
Какие блоки и как Вы вставляете? Если только по столбцу С и соответствующим - выделяете в строке ячейки с D до I и просто двойной щелчек мышкой по квадратику в правом нижнем углу. Автоматически формулы будут распространены до конца данных (блока вниз). На какой тогда Х нужен еще и макрос???
 
попробуйте сделать с помощью цикла:  
(с VBA-грамматикой проблемы, только начал осваивать, код не проверял, знатоки мож подправят)  
 
i=val(target.cells.row) - находим номер строки  
for j=2 to 101 step 9 - цикл на 12 месяцев  
a=cells(9,j).formula  
b=cells(9,j+7).formula  
cells(i,j)=a  
cells(i,j+7)=b  
next  
 
вставьте в код, только сохраните резервную копию - у меня часто из-за этих экспериментов с VBA Excel виснет наглухо :))
 
Вот к чему я пришел в результате :)  
Вроде бы все работает как нужно, но есть 2 проблемы:  
 
Первая  
Макрос корректно работает в таблице "Январь", но если изменять "Февраль", "Март" и так далее, то формулы по прежнему копируются в столбцах таблицы "Январь".  
Может быть возможно как-то строку Destination:=Range("B" & .Row & ":B" & .Row + .Rows.Count - 1) заменить на относительные величины, а не задавать жестко "B" или "I"    
Также как было в изначальном коде (0,-1) и т.п. ?  
А то я редактирую таблицу "Март", а данные изменются для "Января"    
Уточнение: речь идеть о групповом копи-пасте. Так как для If .Rows.Count < 1 Then используется старый код, который относительный, а для "группы" - новый.  
 
Вторая  
Не работают кнопки Undo(Отменить) Redo(Вернуть). Я понимаю, что буфер обмена при копировании с ячейки B9 замещается информацией об этой ячейке, но не вижу причин, почему перстают работать Undo(Отменить) Redo(Вернуть) (((((((((
 
{quote}{login=Максим}{date=25.06.2008 06:01}{thema=}{post}Вот к чему я пришел в результате :)  
Вроде бы все работает как нужно, но есть 2 проблемы:  
 
Первая  
Макрос корректно работает в таблице "Январь", но если изменять "Февраль", "Март" и так далее, то формулы по прежнему копируются в столбцах таблицы "Январь".  
Может быть возможно как-то строку Destination:=Range("B" & .Row & ":B" & .Row + .Rows.Count - 1) заменить на относительные величины, а не задавать жестко "B" или "I"    
Также как было в изначальном коде (0,-1) и т.п. ?  
А то я редактирую таблицу "Март", а данные изменются для "Января"    
Уточнение: речь идеть о групповом копи-пасте. Так как для If .Rows.Count < 1 Then используется старый код, который относительный, а для "группы" - новый.  
 
Вторая  
Не работают кнопки Undo(Отменить) Redo(Вернуть). Я понимаю, что буфер обмена при копировании с ячейки B9 замещается информацией об этой ячейке, но не вижу причин, почему перстают работать Undo(Отменить) Redo(Вернуть) ((((((((({/post}{/quote}  
 
 
i = Val(Target.Cells.Row)  
For j = 2 To 108 Step 9  
Cells(9, j).Copy  
Cells(i, j).Select  
ActiveSheet.Paste  
Cells(9, j + 7).Copy  
Cells(i, j + 7).Select  
ActiveSheet.Paste  
Next  
посмотрите, примерно тоже самое, вставлял после  
If Not Application.Intersect(Target, myKontrRange) Is Nothing Then  
хорошо когда формул чуть-чуть и прописаны они через равное количество столбцов :)
 
Ежик, цикл работает как надо ))) вставляет формулы сразу во все месяца :D  
А качестве просвящения оставил себе копию файла - пригодится вскорости, я уверен.
Страницы: 1
Читают тему
Наверх