Я хочу добавить кнопку сброса условия формата в один из моих файлов.Пользователь может добавлять разные условия форматирования, но я хотел иметь чистые и всегда работающие условия форматирования, которые я изначально включил в файл.Я сделал это, но он не работает идеально.На самом деле, моя проблема в том, что она связана с ошибками, я не могу недооценить возможные ошибки и способы их устранения.
Мой подход:
Сначала я удаляю те, которые соответствуют моим критериямцикл, затем снова примените новое условие снова.Моя проблема в первой части.Я пробовал цикл при каждом подходе элемента и снова от конца к первому циклу (шаг -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