2012-07-13 6 views
2

나는 자주 내 액세스 2010 데이터베이스에 다음과 같은 표현 패턴을 사용IIF 및 ISNULL 호출을 Access 2010 VBA에서 캡슐화하는 방법은 무엇입니까?

여기
IIF(ISNULL(fieldName), Null, myFunction(fieldName)) 

하여 myFunction이 존재하는 않는 경우, 다른 형식으로 fieldName에 값을 켤 수있는 사용자 정의 함수입니다. 조금 타이핑의 감소에 대한

그냥, 나는 다음과 같은 기능을 정의하려고 :

Function IifIsNull(p AS Variant, v AS Variant) AS Variant 
    If IsNull(p) Then IifIsNull = p Else IifIsNull = v 
End Function 

을 나는 다음과 같은 방법으로 그것을 사용하는 가정 :

IifIsNull(fieldName, myFunction(fieldName)) 

그러나 그렇지 않습니다 작업. fieldName이 Null 인 경우 IifIsNull의 반환 값은 #Error이고 IifIsNull도 호출되지 않았습니다.

사용자 정의 함수 또는 시스템 함수로 주어진 코드 패턴을 단순화 할 수 있습니까?

UPDATE :

myFunction의 몇 있는데, 그 모든 기능은 강력하게 입력되어, 간단한 예는 다음

Function RemoveSpace(str AS String) AS String 
    For i=1 to Len(str) 
     If Mid(str,i,1) <> " " Then RemoveSpace = RemoveSpace + Mid(str,i,1) 
    Next 
End Function 

답변

3

내가 myFunction(fieldName)에 오류가 언제 발생한다고 가정 fieldName이 null입니다.

IifIsNull(fieldName, myFunction(fieldName))으로 전화하면 평가되는 첫 번째 것은 myFunction(fieldName)입니다. 따라서 fieldName이 null이면 오류가 발생합니다.

+0

당신은 '# 오류'의 이유를 나타내며 내 질문은 그 이유에 대한 것이 아니라 해결책입니다. –

+1

나는 현명한 사람이 한 번 말한 것처럼 생각한다 : 이유를 이해하고 해결책을 찾는다. 아니면 행운의 쿠키였습니까? 어쨌든, 이해가됩니다. 그렇지 않습니다. –

1

단순히 MyFunction에서 필드 이름을 평가하지 않는 이유는 무엇입니까?

필드 이름에 빈 문자열을 추가하여 항상 null이 아닌 문자열을 전달하는지 확인합니다.

=MyFunction(FieldName & "") 

Function MyFunction(Fieldname) As Variant 
    ''Depending on what your function does, it is may not necessary to check 
    If FieldName<>"" Then 
     MyFunction = FieldName & " was here" 
    End If 
End Function 
+0

여기서 중요한 것은'MyFunction'이 강하게 입력된다는 것입니다. 'Function MyFunction (fildName AS String) As String'. 또한이 두 가지 기능이 있으므로 모든 기능을 변경하기가 어려울 수 있습니다. –

+0

그럴 경우 문자열을 전달하십시오. 메모를 추가하겠습니다. – Fionnuala