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

我试图在类模块中使用布尔值,但代码在“公共属性获取DUPLICATES()作为范围”MsgBox LOADPROPS.DUPLICATES“失败”请有人可以协助?

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

并在类模块中

 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的数据types。 您将它声明为get函数中的一个范围,但pDUPLICATES可以具有布尔值和长整型值(最初是计数,然后在select语句中将其转换为true或false)。

快速解决方法是将它们更改为变体,以便您的类模块变为:

 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 

编辑

为了避免变种,一个更好的方法可能是重构你的类模块,所以你实际上并没有使用get / set属性(你在这里没有真正做的)。 你可以用一个函数来做到这一点,如下所示:

类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