2015-08-11 1 views
0

Я пытаюсь использовать логическое значение в модуле класса, однако код не работает в «MsgBox LOADPROPS.DUPLICATES» с «Public Property Get DUPLICATES() As Range« Пожалуйста, кто-нибудь может помочь ?Использовать countif для определения boolean в модуле класса

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 

ответ

1

Из того, что я могу сказать, что вы путаете тип данных дубликатов. Вы объявляете его как диапазон в функции get, но pDUPLICATES может принимать значение логического и длинного (изначально это счетчик, преобразованный в true или false в оператор select).

Быстрое исправление было бы изменить их варианты, так что ваш модуль класса становится:

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 

EDIT

Чтобы избежать вариантов, лучший подход может реструктурировать свой модуль класса так вы фактически не используете свойства 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