Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2017, 11:31   #1
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию Пересчет итогов по столбцам после удаления строки.

Всем привет. Имеется строка с итогами, которые рассчитываются макросом. Всё работает нормально, но при удалении строки не происходит перерасчет итогов. Как бы устранить эту проблему в моём документе ? В VBA познания мизерные, строго не судить за код, т.к. слеплено из разных источников. Всем, откликнувшимся, спасибо. Файл во вложении.
Вложения
Тип файла: rar Документ1 — копия.rar (23.8 Кб, 12 просмотров)
irina181 вне форума Ответить с цитированием
Старый 12.10.2017, 11:47   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

зачем использовать макросы там, где можно прекрасно обойтись формулами?
они будут работать и быстрее и надёжнее. да и это проще, в конце концов!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.10.2017, 14:46   #3
vefer
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 134
По умолчанию

Не, ну при желании конечно можно отследить удаление строки, но в данном случае действительно проще формулами обойтись. Либо можно сделать удаление строки с помощью макроса.
vefer вне форума Ответить с цитированием
Старый 12.10.2017, 15:22   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

сделать удаление строки с помощью макроса - легко
отследить удаление строки - чуть сложнее, но действительно можно
а самый геморрой - запретить пользователю удалять строку стандартными средствами (только в этом контролируемом файле, в остальных-то можно, зачем пользователя ограничивать, он начнет нервничать)

т.е. с практической точки зрения формула - это идеальное решение,
но с познавательной (если интересно осваивать VBA) - можно заморочиться со всеми этими макросами. и замечено: кому интересно осваивать, тот тихонько и самостоятельно ищет ответы на возникшие вопросы)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.10.2017, 16:02   #5
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Понятно, что формула в данном случае лучше всего. Но хотелось бы узнать, как это можно сделать макросом. Пример решения этого мне в инете не попадался, вот и интересуюсь.
irina181 вне форума Ответить с цитированием
Старый 12.10.2017, 16:21   #6
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Модифицировал
Вложения
Тип файла: zip Документ.zip (22.9 Кб, 11 просмотров)
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 12.10.2017, 16:31   #7
vefer
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Watcher_1 Посмотреть сообщение
Модифицировал
Хитро
vefer вне форума Ответить с цитированием
Старый 12.10.2017, 16:33   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от irina181 Посмотреть сообщение
Но хотелось бы узнать, как это можно сделать макросом.
так технически это не сложно.
дело в том, что процедура, которая у Вас назначена в качестве обработчика при событии возникновения изменений на листе (я имею в виду Worksheet_Change), вызывается и в случае удаления.
это легко посмотреть - либо сделайте точку останова в коде, либо вставьте в процедуру первой строчкой MsgBox
например,
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "вызван обработчик Worksheet->onChange"
....
теперь о том, как отследить действие.
можно, например, не заморачиваться и при любом вызове Worksheet_Change пересчитывать итоги.
Производительность, конечно, рухнет ниже плинтуса.
Можно пытаться оптимизировать - например, при удалении/вставки строки - счётчик Target.Cells.Count равен 16384 (для одной строки - если выделено несколько строк - то надо умножить на число строк) и вызывать пересчёт только в этом случае.
Но это всё равно "квадратные колёса" - не смысла в этом нет, ни проку, ни скорости, ни надёжности.

Вообще, запомните "золотое" правило макросов в MS Excel ( (c) не мой) -
"Всё, что может быть сделано без макросов (формулами) должно быть сделано без макросов (формулами)."
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.10.2017, 17:02   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Watcher_1 Посмотреть сообщение
Модифицировал
молодец! надо было и вычисления по строке тоже формулами сделать.

irina181, поймите, что удаление/вставка строки это не единственные косяки в вычислениях макросом.
например,скопируйте одно значение в несколько ячеек. пересчет не сработает.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.10.2017, 17:04   #10
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Огромное спасибо Watcher_1 за решение проблемы и конечно всем, принявшим участие в обсуждении, за советы.

Последний раз редактировалось irina181; 12.10.2017 в 17:08.
irina181 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос удаления 300 строк после .... lakcin Microsoft Office Excel 3 31.08.2014 15:04
Добавляется новая строка после удаления Dozent БД в Delphi 5 11.02.2014 17:21
Сортировка кода в таблице после удаления allegator333 БД в Delphi 5 20.05.2011 21:57
Очищение DateTimePicker после удаления записи Droid БД в Delphi 9 21.10.2009 15:57
Очистка формата после удаления макроса valerij Microsoft Office Excel 2 14.06.2008 12:00