2013-08-26 3 views
2

분명히 분명해야하지만 어쩔 수없이 붙어 있습니다.Excel VBA 오류 : 동일한 속성에 대한 속성 프로 시저의 정의가 일치하지 않습니다.

Private pSkipTrade As Boolean 
Property Let SkipTrade(value As Double): 
    If value = 0 Then 
     pSkipTrade = False 
    Else 
     pSkipTrade = True 
    End If 
End Property 

Public Property Get SkipTrade() As Boolean 
    SkipTrade = pSkipTrade 
End Property 

이 사람이 나를 도울 수 :

은 VBA 사용자 정의 개체 내부에 다음 코드를 고려?

tks 미리!

+1

:

Private pSkipTrade As Boolean Property Let SkipTrade(value As Boolean) '<--Parameter is Boolean type pSkipTrade = value End Property Public Property Get SkipTrade() As Boolean SkipTrade = pSkipTrade End Property 

가 그런 속성을 사용하면 코드로하자 속성에 있었다 논리를 이동 :

그래서 당신은 부울 유형에 Let 속성의 매개 변수를 변경해야 @DavidZemens. 믿거 나 말거나. 방금 그 방법을 배웠습니다! –

답변

1

이 시도 : 코드에서 다른

Private pSkipTrade As Boolean 
Public Property Let SkipTrade(lSkipTrade As Boolean) 
    pSkipTrade = lSkipTrade 
End Property 
Property Get SkipTrade() As Boolean 
    SkipTrade = pSkipTrade 
End Property 

어딘가에 다른 변수를 사용하여 (예를 들어, value)이 속성을 설정합니다. 이 변수는 유형 Boolean이 아닌 경우 (예를 들어, Long, Double, 또는 Decimal는) 다음과 같은 일을 할 수 있습니다

Sub Test() 
Dim MyObject As Object 
Dim Value As Double    '## or, whatever 

'# CREATE THE CLASS OBJECT 
Set MyObject = New cMyObject '## Modify to be your correct Type 

Value = Application.InputBox("Enter any number") 

'# ASSIGN THE PROPERTY VALUE BASED ON A LOCAL VARIABLE/LOGIC 
' use boolean logic to test whether "value = 0" 
' a non-zero value will return "True" 
MyObject.SkipTrade = Not (CDbl(Value) = 0) 

'# Display the value, so you can see that this is working correctly: 
MsgBox "The value of SkipTrade is: " & MyObject.SkipTrade 

End Sub 

여러 조건이있는 경우,에 Function 전화를 사용하는 것이 좋을 것이다 객체의 속성 할당 중에 속성 값을 반환합니다.

당신은 같은 함수를 호출 할 수 있습니다

:

Function CheckSkipTrade(value) As Boolean 
Dim myVal as Boolean 
    If IsNumeric(value) Then 
     'returns true or false test whether 'value' = 0. 
     myVal = Not(CDbl(value) = 0) 
    Else: 
     myVal = False 

    End If 

    '# Return the value of the function test: 
    CheckSkipTrade = myVal 
End Function 
: 당신이 통합해야 할 수있는 로직을 포함하도록 수정 될 수있는이 같은 기본 코드 모듈의 기능으로

MyObject.SkipTrade = CheckSkipTrade(value) 

MyObject 클래스 개체의 SkipTrade 속성에 대한 할당을 직접 지정한다는 것은 위의 예에서 매우 명백하게 나타납니다 (숨겨진 것이 아니라)는 것을 알 수 있습니까? 반대로, 메소드는 기본적으로 객체 모듈에 숨겨진 서브 루틴을 호출합니다.이 서브 루틴은 속성에 값을 할당합니다. 작동합니까? 예. 그것을하는 것이 가장 좋은 방법입니까? 나는 그렇게 생각하지 않는다. 이것은 나중에 혼란을 일으킬 수있는 코딩 방법입니다 (특히이 프로젝트를 다른 사람에게 넘기는 경우).

명시 적으로암시 코딩보다 더 코딩.

+0

'lSkipTrade'또는 'value'가 이중 일 경우 어떻게해야합니까? –

+0

@AMariani it *는 'pSkipTrade As Boolean' 속성을 선언했기 때문에 이중으로 사용할 수 없습니다. 이 속성에 bool이 아닌 유형을 할당하려고하면 불일치 오류가 발생합니다. –

+0

주위에 방법이 있습니까? 실제로 '값'이 0인지 아닌지에 따라 pSkipTrade를 false로 정의하려고합니다 (그리고 다른 검사도 마찬가지입니다). –

2

Let 매개 변수는 Get 속성의 반환 형식과 일치해야합니다. this을 참조하십시오.

If price = 0 Then 
    SkipTrade = False 
Else 
    SkipTrade = True 
End If