Я написал две VBA подпрограммы:Ошибка при проверке необязательный атрибут условного формата в VBA
1) Чтобы установить условное форматирование (с оператором, Formula1 и Formula2 как опция)
Sub setConditionalFormatting(sheetName As String, cellRange As String, CFcellColor As String, CFfontColor As String, CFtype As XlFormatConditionType, Optional CFoperator As Variant, Optional CFformula1 As Variant, Optional CFformula2 As Variant)
On Error GoTo Errhandler
Dim sheet As Worksheet
Dim cell As range
Set sheet = Sheets(sheetName)
sheet.Select
Set cell = range(cellRange)
cell.Select
'user defined sub to print string in a file
Call OutputString("Setting Conditional Formatting...")
With cell.FormatConditions.Add(_
Type:=CFtype, _
Operator:=CFoperator, _
Formula1:=CFformula1, _
Formula2:=CFformula2)
.Interior.color = CFcellColor
.Font.color = CFfontColor
End With
Call OutputString("Conditional Formatting successfully applied")
Exit Sub
Errhandler:
'a sub for error handling task
Call ErrorHandler(Err)
Exit Sub
End Sub
2) для проверки условного форматирования (CF) над листом и печать атрибутов для каждого CF:
Sub checkConditionalFormattingsOnSheet(sheetName As String, rng As String)
On Error GoTo Errhandler
Dim cellRange As range
Dim i As Integer
Dim temp As Variant
Sheets(sheetName).Select
Set cellRange = range(rng)
cellRange.Select
If cellRange.FormatConditions.Count > 0 Then
Call OutputString("Conditional formatting (CF) in sheet " + sheetName + ":")
For i = 1 To cellRange.FormatConditions.Count
Call OutputString(CStr(i) + ") Conditional Formatting-")
Call OutputString("Interior Color: " + CStr(cellRange.FormatConditions(i).Interior.color))
Call OutputString("Font Color: " + CStr(cellRange.FormatConditions(i).Font.color))
Call OutputString("CF Type: " + CStr(cellRange.FormatConditions(i).Type))
If IsMissing(cellRange.FormatConditions(i).Operator) Then
Call OutputString("CF Operator: Not Applicable")
Else
Call OutputString("CF Operator: " + CStr(cellRange.FormatConditions(i).Operator))
End If
Call OutputString("Formula1: " + CStr(cellRange.FormatConditions(i).Formula1))
If IsMissing(cellRange.FormatConditions(i).Formula2) Then
Call OutputString("CF Formula2: Not Applicable")
Else
Call OutputString("Formula2: " + CStr(cellRange.FormatConditions(i).Formula2))
End If
Next i
ElseIf cellRange.FormatConditions.Count = 0 Then
Call OutputString("No conditional formatting found in sheet " + sheetName)
End If
Exit Sub
Errhandler:
Call ErrorHandler(Err)
Exit Sub
End Sub
Теперь, когда я хочу установить условный формат, скажем, «Клетку со значением Greate г чем 2 должен иметь ячейки окрашенные в RGB (198, 239, 206) и шрифт как RGB (255, 255, 0)», сделав вызов функции
'PS: I am not parameterizing Optional value- Formula2 here
Call setConditionalFormatting("MyWrkSheet", "C5:N13", RGB(198, 239, 206), RGB(255, 255, 0), xlCellValue, xlGreater, "=2")
я получаю ошибку при If IsMissing(cellRange.FormatConditions(i).Formula2)
в checkConditionalFormattingsOnSheet:
Ошибка: приложения или объект определенной ошибки HelpContext: 1000095, ErrorID: 1004
Я пробовал другие варианты, такие как 'ничего', 'IsNull()' и попутные параметры Формула2 как ничто и нуль соответственно, но не имели при удаче!
Спасибо за ваше время и терпение в Advance! :)
PS: Я знаю, один из вариантов может быть использовать значение по умолчанию, но я искал другие варианты, как это не очень хорошая практика, чтобы использовать значения по умолчанию в качестве параметров. – Rishi
Вы должны получить 1004 ошибку, а не 91 ошибку, если попытаетесь проверить 'Формула2', когда это не подходит. – Rory
Да, вы были правы @Rory, это действительно 1004 ошибка, а не 91 ошибка, как вы указали. Эта ошибка 91 была бы вызвана неправильной линией, которую я случайно добавил при отладке. Теперь у меня возникло ощущение, что ваш следующий комментарий к этой теме будет содержать решение моей проблемы :) – Rishi