(VBA) Для цикла, который очищает клетки переменного диапазона - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь создать подпрограмму, которая очищает содержимое ячейки, если ячейки соответствуют определенным параметрам. Я думал, что это будет довольно просто, но кажется, что это сложнее, чем я думал.

Вот требования:

a) функцию нужно запустить, выбрав ячейку с E4 по I4

b) Все в ячейках должно быть очищено, если ячейки не ЦВЕТЫ.

в) с каждой итерацией строка NUMBER увеличивается, столбцы остаются неизменными.

Я приложил код, который я написал, а также «старый код», который мне поручено обновить. Как видите, я пытаюсь сделать новый код более интеллектуальным, чем старый (старый код очищает статический диапазон ячеек).

Я пытался использовать несколько разных операторов цикла каждый разполучить какую-то ошибку. С этим кодом я не получаю сообщение об ошибке (замечательно!), Но, похоже, оно ничего не делает с целевой таблицей. Все ячейки все еще заполнены данными после выполнения этого :(


Sub Clear ()

    target = ActiveSheet.Name  ' Day Sheet
    Sheets(target).Select
    For counter = 4 To 1000
        If Range("e" & counter, "i" & counter).Interior.ColorIndex <> xlColorIndexNone Then
            Range("e" & counter, "i" & counter).ClearContents
            Exit For
        End If
    Next

End Sub

'This is the OLD CODE, that has been proven to work:

Sub Clear()
'
    target = ActiveSheet.Name  ' Day Sheet
    Sheets(target).Select
    Range("c4:i29").Select
    Selection.ClearContents
    Application.CutCopyMode = False
End Sub

Я ожидал, что новый код заработает или, возможно, очистит больше строк, чем требуется, но, похоже, ничего не делает. Экран мигает длядоли секунды, поэтому я знаю, что код работает, но без реального эффекта. Любая помощь приветствуется и очень ценится !!!!

1 Ответ

3 голосов
/ 05 ноября 2019

Ну, вот возможное решение (при условии, что вам нужно очистить все ячейки, которые не окрашены):

Sub Test()

Application.FindFormat.Clear
Application.FindFormat.Interior.Color = xlColorIndexNone

With Sheet1 'Replace with your Sheet's CodeName
    .Range("E4:I1000").Replace What:="*", Replacement:="", SearchFormat:=True, ReplaceFormat:=False
End With

End Sub

Возможно, вы захотите Exit For по дизайну, как только вы нажмете свой первыйцветные клетки. Вы в настоящее время просто проверяете полный диапазон из столбца EI против xlColorIndexNone. И только когда все они разные, вы будете удовлетворять свой чек, и он будет продолжать до ClearContents. Я думаю, именно поэтому ваш код "не работает" (на самом деле он работает), так как он, вероятно, никогда не будет правдой. Также обратите внимание, что ваш Exit For остановит итерацию, как только вышеприведенное утверждение станет истинным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...