2012-01-03 3 views
0

Создание плана плана псевдо Гант в 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, но они только возвращают значения и не могут изменить цвет ячеек или тому подобное.

Вопрос:

  1. это пользовательская функция или условное форматирование, что делает Excel медленно?
  2. Как я могу покрасить ячейки из VBA?
  3. Должен ли я оставить календарные ячейки пустыми и позволить VBA делать раскраску без обходного пути для записи и содержимого в ячейки?
  4. Если ваш ответ на 3. «да». Как это сделать?

Благодарим за прослушивание.

Side Примечание: извините, не могу отправить скриншот еще (Anti-Spam-фильтр)

+0

Вы остановили ScreenUpdating уже? Application.ScreenUpdating = False, и если вам не нужно полагаться на пересчет после каждого набора обновлений EnableCalculation = False – rene

+1

Попробуйте и [удалите все ваши пользовательские форматы] (http://www.vbaexpress.com/kb/getarticle.php ? kb_id = 548) без изменения остальной части вашего кода и посмотреть, работает ли он лучше. Если да, подумайте об использовании vba для изменения формирования ячейки вместо CF. – JMax

+0

Условное форматирование очень эффективно, поэтому виновником может быть ваш UDF - сколько раз вы его используете? (Предложение JMax очень логично) – brettdj

ответ

0

Я когда-то создал динамический Ганта с динамической диаграммы, Вы берете дату начала и рассчитать продолжительность, затем создайте динамическую диаграмму. Вот the instructions

Смежные вопросы