VBA While l oop double условие с условием цвета не повторяется - PullRequest
0 голосов
/ 05 августа 2020

У меня возник вопрос. Пытаюсь создать правила на «пока» l oop. Я хочу по-прежнему находиться в l oop, а:

  • следующие ячейки «A» не пусты

и

  • цвет фона следующих ячеек отличается от 10092390.

Я пробую этот код, но Excel его не принимает:

"While (IsEmpty(Cells((Last + 1), 1)=False) And Not ((Cells((Last + 1),1)).Interior.Color) = 10092390)"

У кого-нибудь есть идея? Ps: извините за мою бедную энгли sh

Ответы [ 3 ]

2 голосов
/ 05 августа 2020
IsEmpty(Cells((Last + 1), 1)=False)
              |--------|  |          'last+1/1 (cell address)'
        |------------------|         'cell content'
        |------------------------|   'check cell content against false'
|---------------------------------|  'is result of check empty?'

Это оценка того, равно ли Cells((Last + 1), 1) False, а затем передача этого в IsEmpty(), что на самом деле не имеет смысла.

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

Not IsEmpty(Cells(Last + 1, 1))

Возможно, лучшим условием l oop было бы значительно упрощенное:

While Not IsEmpty(Cells(Last + 1, 1)) _
And Cells(Last + 1, 1).Interior.Color <> 10092390
0 голосов
/ 05 августа 2020

Если вы хотите быть в l oop, для заявленных условий вы должны построить условия в точности наоборот ... Попробуйте следующий пример:

Sub testWhileCondition()
 Dim sh As Worksheet, Last As Long
 Set sh = ActiveSheet
  Last = 2
  While Not IsEmpty(sh.cells(Last + 1, 1)) Or sh.cells(Last + 1, 1).Interior.Color = 10092390
    Debug.Print sh.cells(Last + 1, 1).Address
    'do here whatever you need.....
    Last = Last + 1
  Wend
End Sub
0 голосов
/ 05 августа 2020

С вашими скобками возникли некоторые проблемы, вы можете попробовать следующее:

While (Not (IsEmpty(Cells(Last + 1, 1))) And (Not (Cells(Last + 1, 1).Interior.Color) = 10092390))

Для вашей информации: при программировании if(<something>=false) обычно заменяют if(not <something>)

...