I have a CLS_Comparison_Predicate which will take an input value, perform a logical comparison and return a Boolean.CLS_Compound_Predicate instead takes lists of predicates and an inputValue, and performs MatchAny() or MatchAll() operations on the predicate list.E.G.predicate_1 has >= 3  predicate_2 has = 5 MatchAny(6) Returns TrueMatchAll(6) Returns False Thoughts?Option ExplicitPrivate predicateList As VariantPrivate Const NULL_ERROR_TEXT As String = Invalid Compare input. Cannot compare against NullPrivate Const OBJECT_ERROR_TEXT As String = Invalid Compare input. Input must be a value, not an objectPrivate Const NOTHING_ERROR_TEXT As String = Invalid Compare Input. Predicate cannot be NothingPrivate Const EMPTY_ERROR_TEXT As String = Invalid Compare Input. Input cannot be emptyPrivate Const ZLS_ERROR_TEXT As String = Invalid Compare Input. Input cannot be a Zero-Length-StringPublic Sub AddPredicate(ByRef inputPredicate As CLS_Comparison_Predicate)    If inputPredicate Is Nothing Then        PrintErrorMessage NOTHING_ERROR_TEXT        Stop    End If    If IsEmpty(predicateList) Then        ReDim predicateList(1 To 1)        Set predicateList(1) = inputPredicate    Else        Dim LB1 As Long, UB1 As Long        GetBounds LB1, UB1        ReDim Preserve predicateList(LB1 To UB1 + 1)        Set predicateList(UB1 + 1) = inputPredicate    End IfEnd SubPublic Sub ClearPredicates()    If Not predicateList Is Nothing Then Erase predicateListEnd SubPublic Function MatchAny(ByVal leftValue As Variant) As Boolean    '/ compares leftValue against predicateList. If any return true, then return true, else return false    CheckInputValue leftValue     Dim LB1 As Long, UB1 As Long    GetBounds LB1, UB1    Dim matchesAny As Boolean    matchesAny = False    Dim predicate As CLS_Comparison_Predicate    Dim ix As Long    For ix = LB1 To UB1        Set predicate = predicateList(ix)        If predicate.Compare(leftValue) Then            matchesAny = True            Exit For        End If    Next ix    MatchAny = matchesAnyEnd FunctionPublic Function MatchAll(ByVal leftValue As Variant) As Boolean    '/ compares leftValue against predicateList. If any return false, then return false, else return true    CheckInputValue leftValue     Dim LB1 As Long, UB1 As Long    GetBounds LB1, UB1    Dim matchesAll As Boolean    matchesAll = True    Dim predicate As CLS_Comparison_Predicate    Dim ix As Long    For ix = LB1 To UB1        Set predicate = predicateList(ix)        If Not predicate.Compare(leftValue) Then            matchesAll = False            Exit For        End If    Next ix    MatchAll = matchesAllEnd FunctionPrivate Sub CheckInputValue(ByVal inputValue As Variant)    '/ Check for NULL, Objects, Empty and ZLS    If IsNull(inputValue) Then        PrintErrorMessage NULL_ERROR_TEXT        Stop    End If    If IsObject(inputValue) Then        PrintErrorMessage OBJECT_ERROR_TEXT        Stop    End If    If IsEmpty(inputValue) Then        PrintErrorMessage EMPTY_ERROR_TEXT        Stop    End If    On Error Resume Next        If Len(inputValue) = 0 Then            PrintErrorMessage ZLS_ERROR_TEXT            Stop        End If    On Error GoTo 0End SubPrivate Sub GetBounds(Optional ByRef LB1 As Long, Optional ByVal UB1 As Long)    LB1 = LBound(predicateList)    UB1 = UBound(predicateList)End Sub
CLS_Compound_Predicate
object oriented;vba