2016-02-01 13 views
1

Мне нужен этот скрипт для пустых 4 ячеек и изменения ячейки от Done до Pending, когда выполняются оба условия.VBA - Изменение значения ячейки на основе двух других ячеек

Я все еще очень неопытный в VBA так извинениями за очень простой и уродливый код: P

If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then 
    Range("A5:B5").ClearContents 
    If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then 
     Range("D5:E5").ClearContents 

     If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then 
      Range("C5").Value = "Pending" 

     End If 
    End If 
End If 

Я не понимаю, почему ячейка C5 не изменяет себя отложенное в этой ситуации, так как D5 Cell действительно очищает себя.

Может быть, потому, что я использую проверку данных для ячейки C5? Он извлекает список с именем = TaskState

TaskState состоит из 4 вариантов: В ожидании In Progress Отложено Done

Большое спасибо

+0

Почему вы используете слишком много 'If' и' then' для тех же условий? – newguy

+2

Думаю, вам стоит пересмотреть основы форматирования [см. Мое редактирование на ваш вопрос об общих стандартах форматирования в VBA] - в этом случае это помогло бы вам увидеть, что каждый оператор If зависит от того, который был до него; это означало бы, что вам не нужно было запускать один и тот же тест несколько раз. –

ответ

2

Попробуйте это:

If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then 
    Range("A5:B5").ClearContents 
    Range("D5:E5").ClearContents 
    Range("C5").Value = "Pending" 

End If 

проблема, как только вы очистите содержимое в столбце D, больше не = 1, а третье. Если возвращает false. Так что он никогда не срабатывает при третьем утверждении if.

Другие операторы if не нужны, если они тестируют одно и то же.

+0

Ты потрясающий :) Еще раз спасибо! Также дает мне лучшее представление о том, как вы можете написать код! Все самое полезное. –

+0

Немного не связано с основной темой. Но скажем, я должен проверить то же самое для строки 5 до строки 35. Есть ли быстрый способ сделать это без копирования и вставки всего кода 34 дополнительных времен и изменения значения 5 до 35? Мне нужно будет переводить каждые 5-6, затем 7, затем 8 и так далее. –

+1

@FrancisMaltais Посмотрите на петли. Это позволит вам сделать строку переменной, и вы затем перейдете по одному и тому же коду 35 раз. –

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