더 큰 설정의 일부인 VBA에 함수가 있습니다. 함수는 Class Module
안에 있으며 기본적으로 영광스러운 뺄셈입니다. 내가 이상한 결과를 얻는 이유가 궁금해서 디버깅 목적으로 기능을 단순화했다. 변수 중 하나에 값을 할당하지 않고 임의의 값을 할당하는 것으로 나타났습니다. 단순한 할당은 어떻게 그렇게 잘못 될 수 있습니까?VBA가 변수에 잘못된 값을 할당합니다.
더 이상한 것은 왜 항상 잘못된 값을 할당하지 않는 이유입니까? 때때로 일어날뿐입니다. 다른 시간은 맞습니다. 그리고 가끔씩 아무 것도 평가되지 않는 것처럼 보이고 함수는 단지 0을 반환합니다.
모두 내 코드에서 문제가 될 수는 없지만 VBA가 작동하는 방식 (예 : 배후)에서는 문제가 될 수 있습니다. 그러나 그것을 이해하지 못하는 한, 완화하기가 어렵습니다.
코드 : I 중단 점에 도달하기 전에 Me.Value2
위에 마우스를 가져 가면
Public Property Get MySubtractionFunction() As Double
Dim tmpValue1 As Double
Dim tmpValue2 As Double
Dim tmpOutput As Double
'When debugging, sometimes CDbl(Me.Value2) evaluates to approximately 18.000
'However tmpValue2 evaluates to approximately 10.000
tmpValue1 = CDbl(Me.Value1)
tmpValue2 = CDbl(Me.Value2)
tmpOutput = tmpValue1 - tmpValue2 'Breakpoint is set at this line
tmpOutput = Application.WorksheetFunction.Min(tmpOutput , tmpValue1)
'Return output
MySubtractionFunction= tmpOutput
End Property
업데이트 1 은, 실제로 tmpValue2
에 할당 된 값을 보여줍니다. 그런 다음 마우스를 제거하고 Me.Value2
위로 마우스를 가져 가면 다른 값을 표시합니다. 코드가 실행되지 않고 어떻게 속성 값이 변경 될 수 있습니까?
업데이트 2 아마 루프 내에서 클래스 개체를 사용할 때만 문제가 발생한다고 언급해야합니다. 다음과 같이 호출됩니다 :
For i = 1 To 1000
Dim myObject As myClass
Set myObject = New myClass
'Some initialization
result = myObject.MySubtractionFunction
'A bunch of other stuff
Set myObject = Nothing
Next i
Me.Value1'와'Me.Value2'은 어떤 유형이다'? 그것들은'String' 타입입니까? 그렇다면 'Double'로 전환하기 전에 실제 가치는 얼마입니까? – user3598756
두 속성의 유형은 모두 'Double'입니다. 방금'CDbl'을 디버깅 시도로 추가 했으므로 필요하지 않습니다. – Noceo
시간 값을 계산하는 것 같습니다. 이러한 값은 잘못 변환 된 것으로 유명합니다. '01 : 10 : 15'와 같은 값이 사용자 양식에서 Dbl로 끝나는 방법을 살펴보십시오. – Variatus