Удаление повторяющихся экземпляров условий условия в диапазоне? - PullRequest
0 голосов
/ 13 марта 2019

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

Пожалуйста, найдите код ниже:

Sub ResetConditionF()
Dim itm, reset As Boolean, errcnt&, i&
    If OSWRng Is Nothing Then AppSet True: reset = True
'    On Error GoTo err2
    With OSWRng
        For i = .FormatConditions.count To 1 Step -1
            Set itm = .FormatConditions(i)
            If LCase(itm.Formula1) Like "*=""closed""" _
              Or LCase(itm.Formula1) Like "*=""check""" _
              Or UCase(itm.Formula1) Like "*=""ATTN""" _
            Then
                itm.Delete
            End If
            Debug.Print .FormatConditions.count
skipp:
        Next
        With .FormatConditions.Add(xlExpression, , "=" & .Cells(1, 42).Address(False, True) & "=""ATTN""")
            .Interior.Color = rgbRed
            .Priority = 1
        End With
        With .FormatConditions.Add(xlExpression, , "=" & .Cells(1, 33).Address(False, True) & "=""Closed""")
            .Interior.Color = 8210719 'rgbBlue
            .Font.Color = vbWhite
            .Priority = 2
        End With
        With .FormatConditions.Add(xlExpression, , "=" & .Cells(1, 42).Address(False, True) & "=""Check""")
            .Interior.Color = rgbOrange
            .Priority = 3
        End With
    End With
    If reset Then AppSet False
    MsgBox errcnt
    Exit Sub

err2:
    errcnt = errcnt + 1
    Debug.Print itm.Priority
    Resume skipp
End Sub  

Я также пробовал этот экземпляр цикла:

For Each itm In .FormatConditions
    If LCase(itm.Formula1) Like "*=""closed""" _
      Or LCase(itm.Formula1) Like "*""check""" _
      Or UCase(itm.Formula1) Like "*""ATTN""" _
    Then itm.Delete
Next

Если я запускаю код несколько раз (with on error resume next), он очистится, но почему я должен запустить его несколько раз?В чем моя ошибка?
Спасибо за вашу помощь.
M

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