使用 countif 确定 class 模块中的布尔值

Use countif to determine boolean in a class module

我正在尝试在 class 模块中使用布尔值,但是代码在“MsgBox LOADPROPS.DUPLICATES”和“Public 属性 Get DUPLICATES()作为范围”请有人帮忙吗?

 Sub INITIALIZE_CLASS()
    Dim LOADPROPS As cLoadData
    Set LOADPROPS = New cLoadData
    LOADPROPS.DUPLICATES = PasteLoadingForm.Columns("K")
    MsgBox LOADPROPS.DUPLICATES
End Sub

并在 class 模块中

Public Property Get DUPLICATES() As Range
    DUPLICATES = pDUPLICATES
End Property

Public Property Let DUPLICATES(Value As Range)
    Dim lcount As Long
    lcount = Application.WorksheetFunction.CountIf(Value, "DUPLICATE")
    '
    pDUPLICATES = lcount
        Select Case pDUPLICATES
            Case Is = 0
                pDUPLICATES = False
            Case Is >= 0
                pDUPLICATES = True
            Case Else
                MsgBox "Error"
        End Select
End Property

据我所知,您混淆了 DUPLICATES 的数据类型。您在 get 函数中将其声明为范围,但 pDUPLICATES 可以采用布尔值和长值(最初是计数,然后在 select 语句中转换为 true 或 false)。

快速解决方法是将它们更改为变体,因此您的 class 模块变为:

Private pDUPLICATES As Variant

Public Property Get DUPLICATES() As Variant
    DUPLICATES = pDUPLICATES
End Property

Public Property Let DUPLICATES(Value As Variant)
    Dim lcount As Long
    lcount = Application.WorksheetFunction.CountIf(Value, "DUPLICATE")
    '
    pDUPLICATES = lcount
        Select Case pDUPLICATES
            Case Is = 0
                pDUPLICATES = False
            Case Is >= 0
                pDUPLICATES = True
            Case Else
                MsgBox "Error"
        End Select
End Property

编辑

为了避免变体,更好的方法可能是重构您的 class 模块,这样您就不会真正使用 get/set 属性(您实际上并没有在这里使用)。您可以使用如下函数完成此操作:

Class cLoadDataV2

Option Explicit

Public pDUPLICATES As Boolean

Public Function fDuplicates(rngInputRange As Range)

    Dim lcount As Long

    lcount = Application.WorksheetFunction.CountIf(rngInputRange, "DUPLICATE")

    Select Case lcount
        Case Is = 0
            pDUPLICATES = False
        Case Is >= 0
            pDUPLICATES = True
        Case Else
            MsgBox "Error"
    End Select

End Function

常规模块

Sub Initialise_v2()

    Dim LOADPROPS As cLoadDataV2
    Set LOADPROPS = New cLoadDataV2

    LOADPROPS.fDuplicates (Sheet1.Columns("K"))
    MsgBox LOADPROPS.pDUPLICATES

End Sub