Страницы: 1
RSS
В каких случаях могут быть проблемы при применении свойств Application
 
Добрый день!

В каких случаях нельзя/нежелательно использовать каждый из следующих свойств? В каких случаях у меня могут быть проблемы?
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
 
свойства
Application.Calculation
Application.ScreenUpdating
Application.EnableEvents
вы можете использовать всегда и везде, где это вам нужно
а проблемы в работе Excel могут наступить во всех случаях, когда бездумно и бестолково присваивать этим свойствам новые значения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
отключайте всегда ) А если пойдёт что-то не так, то включите )
 
Ответ на такой вопрос может не поместиться в тонкую брошюру, что уже говорить о теме на форуме ;)
Вопрос общий и не имеет конкретики, Ну, подскажут Вам 5-7 случаев... Потом будете форум матом обкладывать (а, неправильно подсказали)...
 
anmendel, здравствуйте
Доступно:
Модераторам (название): В каких случаях используются популярные методы объекта Application
Изменено: Jack Famous - 30.03.2021 14:40:15
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Это если автор хотел именно это получить )
 
vikttur, ну да  :D
Молчание - знак согласия  8)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
нежелательно
ИМХО
В том случае если в макросе возможны критические ошибки, которые бейсик не может перехватить и не показывает строку с ошибкой, а просто вылетает.
В таком случае лист перестаёт реагировать на всё И вы не знаете как быть
Можно только зайти в редактор и написать и запустить макрос оживления со строками:
Код
Application.ScreenUpdating=true
Application.EnableEvents=true
 
Насколько я понял, ScreenUpdating и EnableEvents довольно безопасны при работе с незамысловатыми макросами. На результаты вычислений никак не повлияют.
А вот с Calculation боюсь представить какие косяки могут быть. И могут ли они быть?

К примеру, кейс с отключением Calculation:
  • вставляем в столбец A числа
  • В столбце B у нас формула протянута, ссылающаяся на столбец A
  • Рассчитываем столбец С так C_i = A_i + B_i. циклом, внутри макроса.
Вопрос, столбец C будет корректный? или из-за того, что столбец B не обновился, то и в C будет некорректная инфа?
 
Цитата
anmendel написал:
столбец C будет корректный?
смотря что считать корректным и как потом с этим работать. Если после этого просто завершается макрос и возвращается автопересчет - то никаких проблем и ошибок. А если вычисленные значения этого столбца нужны будут именно в макросе до возврата автопересчета - то обычно принудительно пересчитывают нужные диапазоны:
Код
Range("B:C").Calculate
Это если уверены, что вычисления только от этих двух столбцов зависит.
Ну а вообще, всех ситуаций и правильных путей никто не подскажет - все зависит от логики кода и необходимого результата.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
New написал:
отключайте всегда ) А если пойдёт что-то не так, то включите )
ну да, правда не понятно когда вылезет

1. Перед изменением сохранить предыдущее состояние и вернуть именно его, а не просто включить - это идеальный вариант который исключит сбой например при рекурсии, когда при выходе из подпрограммы будет изменено состояние в некорректное.
2.  Естественно нет смысла делать сохранение статуса предыдущего в событийных подпрограммах. но как раз из них можно получить зацыкливание.
3. Обрабатывать ошибки и при аварийном выходе восстанавливать состояние перед, при этом грамотно выходить со всех уровней вложенности.

но в целом, нужно отключать где нужно и приводит к результату без последствий и не трогать где бессмысленно. Иногда в ущерб быстродействию лучше меть интерактивное обновление, а не задумчивость на минуту и вывод результата.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
1. Перед изменением сохранить предыдущее состояние и вернуть именно его, а не просто включить - это идеальный вариант который исключит сбой например при рекурсии, когда при выходе из подпрограммы будет изменено состояние в некорректное.
Добрый день!

Расскажите, пожалуйста, поподробнее!
Я правильно понял, что при переходе из процедуры в процедуру сбрасываются состояния этих свойств? Я обычно открываю и закрываю эти свойства в самой корневой процедуре, которая запускает у меня формы. И у меня возникали странные ситуации, когда я с помощью дебага смотрю состояние статусов после запуска формы и они у меня некорректные (хотя я их отключал и по логике программы еще не успел включить обратно). А если в том же месте смотрю с мощью MsgBox (Application.ScreenUpdating), то все значения у меня корректны
 
Цитата
anmendel: при переходе из процедуры в процедуру сбрасываются состояния этих свойств?
это не сложно проверить самому - накидайте пример и выложите сюда ,если что-то непонятно
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
vikttur написал: Это если автор хотел именно это получить )
Цитата
Jack Famous написал: В каких случаях используются популярные методы объекта Application
Автор, да?
 
Цитата
anmendel написал:
Я правильно понял, что при переходе из процедуры в процедуру сбрасываются состояния этих свойств?
нет, но вот в режиме отладки, некоторые свойства ведут себя иначе.
По вопросам из тем форума, личку не читаю.
 
vikttur, судя по всему, нет  :D
ТС сам не знает, чего хочет, но глобально понятно - хочет избежать беды  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
vikttur,нет. Я пытаюсь выяснить нюансы работы с этими свойствами, потому что нормальной документации у vba нет. А люди мне хорошо помогают
 
о каких нюансах работы с этими свойствами речь???
какие нюансы вам нужны? все что вы можете:
1. можете прочитать состояние свойства
2. можете присвоить свойству другое значение
какие еще нюансы работы?

возьмем
Application.ReferenceStyle
вы можете прочитать состояние свойства
и можете присвоить ему нужное вам значение:
Application.ReferenceStyle = xlR1C  ' это -4150
или
Application.ReferenceStyle = xlA1  ' это 1
все!
какие еще нюансы? посмотреть значение или назначить НУЖНОЕ вам значение (из списка допустимых для этого свойства значений)
и это ничем не отличается от остальных, перечисленных в этой теме свойств обьекта Application
Цитата
anmendel написал:
потому что нормальной документации у vba нет
в VBA есть нормальная документация.
если одни читают и ничего не понимают, а другие читают и понимаю что там написано - проблема не в документации и даже не в ее качестве (способе изложения), а в том, кто ее читает, в его желании читать, пока не разберешься
Изменено: Ігор Гончаренко - 05.04.2021 17:52:01
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх