Спасибо всем. Ссылку от Sokol92 почитала. Про красоту поняла 
использую решение от k61.
использую решение от k61.
|
07.12.2018 11:02:50
Calculate - это круто, конечно, но снова-таки, учитывая размерность моих данных - Range("A7:SW1006") тут любой calculate загнется, поэтому расчеты происходят не автоматически, а в VBA по нажатию кнопки )
По поводу массивов - посмотрю, вроде у Димы Щербакова на сайте видела или у Игоря неплохие решения, вот ищу |
|
|
|
|
|
07.12.2018 10:49:38
, здрасьте
Ситуация такая: имеем в загруженном интерфейсе лист Excel. Путем скрытия/открытия блокировки/разблокировки столбцов заносим туда разные данные. От этих данных зависят другие данные, т.е. мы занесли какие-то значения, поменяли, и нужно пересчитать зависящие от измененных ячеек данные. Так вот, чтобы из 1006 строк не пересчитывать все подряд, потребовалось пересчитать только те строки, в которых были произведены изменения. Как-то так Насколько я понимаю, нужно считать диапазон до изменения в массив, потом после изменения в массив. Потом сравнить массивы и, следовательно, получить измененные строки. Вот ищу алгоритмы теперь как быстро сравнить два массива. |
|
|
|
|
|
07.12.2018 08:15:37
Здравствуйте.
Имеется необходимость отследить строки, в которых изменились ячейки. Собственно, простейший макрос:
Если мы по одной ячейке изменяем, все корректно. Если работаем с диапазоном – не очень. Пример: пустой лист.
Как видно, в ячейке A2 значений нет. Если выделить диапазон A1:A3 нажать Delete, то Excel считает, что изменения произошли во всем диапазоне, хотя по факту только в 1 и 3 строке. Как отследить значения именно измененных строк? (т.е. если не было значений и удалились – это уже не изменение, а если были и удалились/поменялись – уже изменение). Спасибо.
Изменено: - 07.12.2018 12:16:39
|
|||||
|
|
|
|
03.12.2018 15:23:14
Проверила на других компьютерах сейчас:
Офис 2007 - время выполнения 0,06 сек. В обоих случаях. Офис 2010 - время выполнения 0,06+/-0,02 сек в обоих случаях. Офис 365 - от нескольких секунд через надстройку и 0,05+/-0,02 сек через Sub saveData() Может, есть у кого предположения, где копать, чтобы в 365 пошустрее было? |
|
|
|
|
|
03.12.2018 12:57:10
Пример прилагаю
В моем случае сейчас через надстройку - 4,07 сек. Напрямую - 0,07 сек. Перед запуском, сохраните, пожалуйста, все свои документы Excel! Запускаем Книгу 1. Подключаем надстройку 1. На панельке есть кнопочка – сохранить все. Через нее макрос обрабатывается в разы дольше, чем запуск напрямую из VBA. В функции calculateData сделан повтор вычислений для наглядности "торможения". В результате работы макроса будет создаваться документ 1.txt.
Изменено: - 03.12.2018 14:14:10
|
|
|
|
|
|
03.12.2018 10:17:03
Здравствуйте.
Появился вопрос, с которым я никогда не сталкивалась. Имеется надстройка, кнопочки выведены через Ribbon. Следовательно, имеется RibbonCallbacks. В RibbonCallbacks имеется:
Если его запустить через VBA (макрос Savetest) напрямую, то время выполнения составляет 0,4 сек. В чем может быть причина? Спасибо. |
|||
|
|
|
|
24.11.2018 12:36:07
Так не проще ли скомпилировать весь код в DLL? Или создать EXE файл?
Тогда уже сложнее будет и защиту открыть, и код посмотреть. Лично я пользуюсь решениями от . Они хоть и платные, зато не беспокоюсь, что кто-то прочитает мой код, потом еще, если разберется в нем, будет использовать в своих корыстных целях |
|
|
|
|
|
23.11.2018 23:10:57
, спасибо
но в моем примере она показывает "15", а должна быть "28". метод из поста решил проблему.
|
|||
|
|
|