Создание плана плана псевдо Гант в Excel. Для тех сотрудников без MS Project я столкнулся с следующей проблемой. Лист Excel становится очень вялым. Я не уверен, вызвана ли она функцией VBA, которую я использовал, или условным форматированием.VBA делает Excel медленным? Или условное форматирование?
Таблица начинается с задания задачи Задача, продолжительность, taskStart, taskEnd.
и продолжается с частью календаря, включая поля weekStart и weekEnd. В каждом календарном клетке является формульной
=PseudoGantt(task;duration;taskStart;taskEnd;weekStart;weekEnd)
Макрос выглядит следующим образом:
Function PseudoGantt(taskName As String, taskLength As Integer, taskStart As Date, taskEnd As Date, weekStart As Date, weekEnd As Date) As String
PseudoGantt = Switch(_
taskName = "", "empty", _
taskStart = taskEnd And taskStart >= weekStart And taskEnd <= weekEnd, "milestone", _
taskLength = 0 And taskStart >= weekStart And taskStart < weekEnd, "summarytask", _
taskLength = 0 And taskEnd <= weekEnd And taskEnd > weekStart, "summarytask", _
taskLength = 0 And taskStart < weekStart And taskEnd > weekEnd, "summarytask", _
taskStart >= weekStart And taskStart < weekEnd, "start", _
taskEnd <= weekEnd And taskEnd > weekStart, "end", _
taskStart < weekStart And taskEnd > weekEnd, "continue", _
True, "empty" _
)
End Function
Это позволит заполнить ячейку с состоянием Ганта недели находится в, который я использую в качестве условия для условное форматирование для правильной окраски ячейки.
Это работает, но, как я уже сказал, это делает Excel очень медленным.
Я думал о замене условного форматирования в пользовательской функции VBA, но они только возвращают значения и не могут изменить цвет ячеек или тому подобное.
Вопрос:
- это пользовательская функция или условное форматирование, что делает Excel медленно?
- Как я могу покрасить ячейки из VBA?
- Должен ли я оставить календарные ячейки пустыми и позволить VBA делать раскраску без обходного пути для записи и содержимого в ячейки?
- Если ваш ответ на 3. «да». Как это сделать?
Благодарим за прослушивание.
Side Примечание: извините, не могу отправить скриншот еще (Anti-Spam-фильтр)
Вы остановили ScreenUpdating уже? Application.ScreenUpdating = False, и если вам не нужно полагаться на пересчет после каждого набора обновлений EnableCalculation = False – rene
Попробуйте и [удалите все ваши пользовательские форматы] (http://www.vbaexpress.com/kb/getarticle.php ? kb_id = 548) без изменения остальной части вашего кода и посмотреть, работает ли он лучше. Если да, подумайте об использовании vba для изменения формирования ячейки вместо CF. – JMax
Условное форматирование очень эффективно, поэтому виновником может быть ваш UDF - сколько раз вы его используете? (Предложение JMax очень логично) – brettdj