Calculating 4 threads excel что это

Обновлено: 08.07.2024

Ну для простоты. есть две ячейки и они обновляються по принципу: если обе то обе; если одна то одна, а вторая копируется.
Таким образом можно конечно и Worksheet_Change
но тогда надо заморачиваться с проверкой что именно изменилась нужная. Так что идея со связью на другой лист была интересна если бы не .
А вопрос то был насамом деле про обновление по связи, что Эксел его не воспринимает как изменение и Worksheet_Change не включается.

Originally posted by BAGA

А вопрос то был насамом деле про обновление по связи, что Эксел его не воспринимает как изменение и Worksheet_Change не включается.

Все равно лично мне не очень понятны, все эти сложности с обновлением.

Чего мы добиваемся связав несколько ячеек с одной на другом листе? причем если одна, то одна, если две то одна. и непонятна роль макроса еще при этом, зачем ему запускаться, для корректировки чего и т.д. вообщем у меня полная каша.

Хотелось бы увидеть простой пример воочию, и более предметно узнать о примере зависимостей, для чего и почему

Что-то эта тема раньше прошла мимо меня. :)

Воспользуйся событиями книги:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)

Попробуй WorkSheet_Calculate + проверка значений нужных ячеек (если конечно их не слишком много):
В макросе WorkBook_Open считываем начальные значения ячеек.
Потом по WorkSheet_Calculate проверяем все ячейки на изменения.
. а дальше делай чего надо.

Originally posted by SergeySV
Все равно лично мне не очень понятны, все эти сложности с обновлением.

Чего мы добиваемся связав несколько ячеек с одной на другом листе? . вообщем у меня полная каша.

Хотелось бы увидеть простой пример воочию, и более предметно узнать о примере зависимостей, для чего и почему

Проблема же следующая: (если отвлечся от птичек..)
Есть Лист1 и Лист2.
Есть связь между А1 Листа1 и А1 Листа2.
Есть макрос Change на Листе2.
А, теперь ручками меняем значение в А1 на Листе1..
И как Вы все понимаете на Листе2 в ячейке А1 число то-же поменялось, НО макрос не
запустился :o
При дальнейшем копании выяснилось, что проблема судя по всему в том, что в момент изменения данных Лист2 не был активен. И Excel не считает такое изменение событием.
Теперь несколько слов на кой весь этот .
данный простой пример иметирует ситуацию когда для нужд проекта в моменты обновления данных из внешних источников (которые сбрасываются все в один лист, а потом распределяются связями между другими листами)необходимо иметь активными совсем другие листы. :-?

  1. Если в коде есть много всяких Activate и Select , тем более в циклах - следует немедленно от них избавиться. Как это сделать я писал в статье: Select и Activate - зачем нужны и нужны ли?
  2. Обязательно на время выполнения кода отключить:
  3. автоматический пересчет формул . Чтобы формулы не пересчитывались при каждой манипуляции на листе во время выполнения кода - это может дико тормозить код, если формул много:

Если во время кода все же нужно пересчитывать какие-то диапазоны, то можно пересчитывать только их:

Главное, что следует помнить - все эти свойства необходимо включить обратно после работы кода . Иначе могут быть проблемы с работой внутри Excel. Например, если забыть включить автопересчет формул - большинство формул будут пересчитывать исключительно принудительным методом - после нажатия сочетания клавиш Shift + F9 . А если забыть отключить обновление экрана - то есть шанс заблокировать себе возможность работы на листах и книгах. Хотя по умолчанию свойство ScreenUpdating и должно возвращаться в True, если было отключено внутри процедуры - лучше не надеяться на это и привыкать возвращать все свойства на свои места принудительно. По сути все это сведется к нескольким строкам:

'Возвращаем обновление экрана Application.ScreenUpdating = True 'Возвращаем автопересчет формул Application.Calculation = xlCalculationAutomatic 'Включаем отслеживание событий Application.EnableEvents = True

Как такой код выглядит на практике. Предположим, надо записать в цикле в 10 000 строк значения:

Sub TestOptimize() 'отключаем обновление экрана Application.ScreenUpdating = False 'Отключаем автопересчет формул Application.Calculation = xlCalculationManual 'Отключаем отслеживание событий Application.EnableEvents = False 'Отключаем разбиение на печатные страницы ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False 'Непосредственно код заполнения ячеек Dim lr As Long For lr = 1 To 10000 Cells(lr, 1).Value = lr 'для примера просто пронумеруем строки Next 'Возвращаем обновление экрана Application.ScreenUpdating = True 'Возвращаем автопересчет формул Application.Calculation = xlCalculationAutomatic 'Включаем отслеживание событий Application.EnableEvents = True End Sub

Для более опытных пользователей VBA я приведу несколько решений по оптимизации кодов в различных ситуациях:

    Самая хорошая оптимизация кода, если приходится работать с ячейками листа напрямую, обрабатывать их и, возможно, изменять значения, то быстрее все обработки делать в массиве и разом выгружать на листе. Например, код выше по заполнению ячеек номерами будет в этом случае выглядеть так:

Те, кто работает с большими данными в excel, порой сталкиваются с тем, что файл начинает подвисать, расчет формул происходит не мгновенно, а в течение нескольких секунд, а то и доходит до десятков секунд.

Все это свидетельствует о том, что ваш файл стал слишком "тяжелым". Как следствие, могут возникнуть и проблемы с отправкой такого файла по почте из-за ограничений размера отправляемого файла.

Есть несколько основных причин, почему ваш файл стал медленно работать и потяжелел:

1. Использование старых форматов книг excel . В последних версиях программы (начиная с 2007) появились новые форматы для файлов excel, которые значительно легче, чем предыдущие (xlsx, xlsm, xlsb) т.к. используют новый подход к сжатию файлов.

При возможности, когда вы сохраняете файл - используйте эти форматы.

2. Форматирование сильно утяжеляет файл . Если в своем excel вы используете условное форматирование, особенно цветное - оно влияет на скорость работы файла и его вес.

По возможности старайтесь минимизировать количество такого форматирования в excel.

3. Диапазон используемых данных при пересчете значений . Если вы, например, ранее использовали диапазон ячеек 100*100, потом удалили значения в этих ячейках и стали использовать диапазон 5*5, то скорее всего excel при работе с вашими данными и при их сохранении в памяти держит бОльший диапазон, что сильно влияет на его вес.

Для того, чтобы точно от этого избавиться, выделите все строки под вашими рабочими данными (например, с помощью сочетания клавиш Ctrl+Shift+стрелка вниз) и удалите эти строки (на ленте во вкладке Главная -> Удалить -> Удалить строки с листа). Тоже самое проделайте и со столбцами.

4. Сводные таблицы . Количество сводных таблица напрямую влияет на вес и быстродействие файла. Чем их больше - тем сложнее с ним работать.

Power Pivot может сильно помочь в этом случае, но придется потратить время на его освоение.

5. Количество графических элементов, диаграмм и примечаний также может повлиять на вес файла. Я видела файлы, в которых десятки, а то и несколько сотен диаграмм. Работать с таким файлом очень сложно.

Если наличие этих элементов не принципиально - избавьтесь от них.

Еще один простой совет - не превращайте excel в инструмент создания дэшбордов и сложных визуализаций. Попробуйте для этого использовать Power Point, Power BI или любую другую программу для визуализации данных.

6. Макросы и еще раз макросы способны из вашего excel сделать очень медленноработающий файл. Особенно громоздкие. При отправке отчета вы можете пересохранить файл в формате, не поддерживающем макросы, и тогда он станет значительно легче.

7. Большое количество расчетных формул в совокупности с "простыней" исходных данных также могут вам помешать. При отправке файла можно сохранить формулы как значения и убрать исходные данные, если это допустимо.

С учетом того, что если соответствовать всем 7 рекомендациям, можно потерять очень много в части визуализации в excel и удобстве работы с отчетом, я предлагаю использовать каждый из пунктов по отдельности и по очереди. Возможно, на каком-то из этапов вам удастся сократить вес файла без потери диаграмм, форматирования и прочих удобных штук.

✔ Ищите ответы на свои вопросы в статье Фишки excel - подборка статей . Там я перечислила все свои статьи по разбору работы функций excel.

✔ Вот здесь есть подборка видео о том, как строить необычные диаграммы - Фишки Excel - подборка видеороликов .

Тема пока не исследована.
Пока заметил лишь разницу в работе Calculate.

Calculate вызванный с функции прописанной на листе - лист пересчитывает.
Calculate, вызванный с функции какого-нибудь модуля (как например ThisWorkbook.Worksheets(Name).Calculate) - зачастую лист не пересчитывает.

Кто-то с таким сталкивался. Можете объяснить разницу?

Добавлено через 2 часа 41 минуту
Примечание:
не ThisWorkbook.Worksheets(Name).Calculate
а ThisWorkbook.Worksheets(dName).Calculate

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

может кто сталкивался .


Событие листа Calculate
Такая проблема. После импорта лист запускает обработку данных событием calculate. При этом он.

Пересчет формул только для 1 листа
Подскажите, пож. Ситуация: программный пересчет объемных данных на листе 1; генерируются.


Единократный пересчет листа в книге xls
Здравствуйте, господа программисты. Подскажите - как с помощью VBScript - в определенной уже.

Пересчет тИЦ и пересчет позиций
Скажите пожалуйста, как по времени соотносятся между собой пересчет тИЦ и пересчет позиций. Это.

StepInLik, похоже, вы первый! На работе не до тонкостей.

Да стараюсь по теме. У нас в коммерческом листы пересчитывают по 10 раз на дню.

Просто хочу представить, как в рабочей обстановке разглядеть такие тонкости.

Задача: При загрузке файла необходимо пересчитать все формулы книги (в книге от 2 до 10 листов).
Ограничение: Перехватывать управление книгой при загрузке до момента полного пересчета - нельзя т.к. процесс отнимет много времени и пользователь останется недоволен .
P.S. Замечено, что пользователь зачастую переходит на какой-то лист и потом подолгу там сидит изучая данные этого листа.
Вывод: как только открылась книга - начать перманентно/прозрачно пересчитывать все формулы книги на всех ее листах - параллельно работе пользователя (DoEvents), а при переходе пользователя на какой-то лист - лочить книгу и принудительно пересчитывать именно этот лист (если он пока не был полностью пересчитан прежним переходом или функцией "параллельго" пересчета) . и после пересчета этого активного листа - продолжать работу по перманентному/прозрачному пересчету всех других листов .

Проблема: Если на событие активации листа вешать принудительный пересчет, то:
- если вызывается функция модуля, которой передается имя этого листа и пересчет вызывается как ThisWorkbook.Worksheets(dName$).Calculate - лист иногда! не пересчитывается (и формулы листа остаются нулями и НД)
- если вызывать ту же самую функцию, только не из модуля, а из листа (который пересчитывается), только в которой будет написано Calculate (как cacl текущего листа) - все всегда четко пересчитывается

пока не могу понять зависимости такого поведения. просто интересно почему так?! (если разберусь - отпишусь конечно)

Наверное у вас нет настроения, относитесь ко всему проще, попробуйте удалить то что вам мешает, перейти на другой офис (2003) сменить комп на более быстрый

Night Ranger, и вы туда же — забалтывать!

Я по сути сказать что-то ценное не могу, но просто любопытна сама организация труда и такая забота о работниках!

Читайте также: