2012-04-21 3 views
4

삽입하려고하는 레코드가 이미 있지만 형식 불일치를 반환하는 경우 VBA에서 함수를 만들려고합니다.DLookup (다중 기준 포함)을 사용하여 레코드가 있는지 확인

EventCombo는 정수 MedalCombo 문자열을입니다

Private Sub MyCombo_BeforeUpdate(Cancel As Integer) 

If Not IsNull(DLookup("RacerID", "Medals", "RaceID = " + EventCombo.Value _ 
+ " AND Medal = '" + MedalCombo.Value + "'")) Then 
MsgBox "Record Exists" 
End If. 

End Sub 

이가하는 (또는 할 예정이다) 확인 다른 사람이 같은 경기에서 같은 메달이 없습니다 만드는 무엇입니까.

내가 뭘 잘못하고 있니?

+0

http://msdn.microsoft.com/en-us/library/bb148913%28v=office.12%29.aspx –

+2

사용 및 (개인 취향 무시 주시기 바랍니다) VBA에서 연결하려면 + null 문자열을 반환하는 데 문제가 발생할 수 있습니다. MedalCombo의 바운드 필드가 숫자가 아닌 것은 확실합니까? – Fionnuala

+0

감사합니다. 그 트릭을 했어! – Imran

답변

2

Access에서 콤보 상자를 사용하려면 .value가 실제로 원하는지 확인해야합니다. 종종 첫 번째 열은 .value로 숨겨져있는 반면, 드롭 다운 상자에는 볼 수있는 것이 .value가 아닙니다. 콤보 상자를 사용하여 혼동을 없애려면 .columns 속성을 사용합니다.

또한 콤보 상자의 결과가 숫자가 아닌 텍스트인지 확인하려면 val() 함수를 사용하여 콤보 상자 데이터를 숫자로 변환했습니다. 이미 숫자 인 경우 효과가 없습니다. 그렇지 않으면 문자열로 저장된 숫자 인 경우이를 숫자로 변환합니다. 이것은 꼭 필요한 것은 아니지만 또 다른 가능한 문제점을 제거합니다. 콤보 상자 열이 숫자로 변환 할 수없는 텍스트 인 값을 갖고 있으면 코드에서 테스트 할 수있는 0을 반환합니다.

나는 비트와 함께 코드를 정리 Remou이

  • 이 .columns에 .value를 변경 말했듯이 나는 &으로 +를 대체

    • 다음 (0). 찾으려는 열이 처음이 아닌 경우 0을 적절한 값으로 변경하십시오.
    • value() function
    • 제거 된 행 계속 _.

    Private Sub MyCombo_BeforeUpdate(Cancel As Integer) 
    
        If Not IsNull(DLookup("RacerID", "Medals", "RaceID = " & Val(EventCombo.Columns(0)) & " AND Medal = '" & MedalCombo.Columns(0) & "'")) Then 
         MsgBox "Record Exists" 
        End If 
    
    End Sub 
    
    +1

    제 생각에는 열이 필요한 특별한 이유가없는 한 열을 참조하는 것이 아니라 바운드 열 값을 사용하는 것이 좋습니다. 바인드 된 열을 참조하면 모든 코드를 일치시킬 필요없이 SQL을 훨씬 쉽게 변경할 수 있습니다. 또한, Val은 완전히 불필요합니다. – Fionnuala

    관련 문제