使用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