使用 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
我正在尝试在 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