vba
2013-10-15 3 views 0 likes 
0

아래 수식이 있지만 수식의 AND 부분이 인식되지 않습니다. 누구든지 살펴보고 적절한 버전을 제공 할 수 있습니까?MS Access 2010 VBA

If DCount("*", "AssetTagTable", "SerialNumber='" & Me.SerialNumber & "'") > 6 Or _ 
     DCount("*", "AssetTagTable", "SerialNumber='" & Me.SerialNumber & "' And _ 
     [DMax P/N]='" & DLookup("[DMS P/N]", "InventoryList", "Category In('PC','Terminal')") & "'") > 3 Then 

답변

0
If DCount("*", "AssetTagTable", "SerialNumber='" & Me.SerialNumber & "'") > 6 Or _ 
     DCount("*", "AssetTagTable", "SerialNumber='" & Me.SerialNumber & "' And " _ 
     " [DMax P/N]='" & DLookup("[DMS P/N]", "InventoryList", "Category In('PC','Terminal')") & "'") > 3 Then 

지금 열려있는 VBA를 가지고 있지만,이 시도하지 않는, 두 번째 행이 올바르게 종료되지 않았습니다.

+0

여전히 목록 구분 기호 또는 오류가 발생합니다. – Ricardo

0

나는 이것을 작동 시켰습니다. 웬일인지 그것은 DCount 내에서 두 개의 문자열을 분리하는 밑줄처럼 보이지 않지만, & 전에 오른쪽으로 옮기면 "목록 분리 기호 또는"오류가 발생합니다.

  If DCount("*", "AssetTagTable", "SerialNumber='" & Me.SerialNumber & "'") > 6 Or _ 
      DCount("*", "AssetTagTable", "SerialNumber='" & Me.SerialNumber & "' And [DMax P/N]='" _ 
      & DLookup("[DMS P/N]", "InventoryList", "Category In('PC','Terminal')") & "'") > 3 Then 

어떻게 작동하나요?

0

리카르도; 이 양식이 폼이나 보고서의 텍스트 상자에 있는지 여부는 언급하지 않습니다. 또는 VBA 코드를 작성하는 경우 이 2 가지 상황에 대한 나의 답은 매우 다를 것입니다. 일반적으로 이전 (Access 2003) 기능을 사용하는 사용자를 볼 때 양식에 모든 것을 쓸 수 있어야합니다. 그래서 나는 이것이 사실이라고 추측 할 것이다.

1) MS DLookUp 함수에서 세 번째 매개 변수로 SQL 구문 ("범주 입력()")을 사용하고 있습니다. 범주 ('PC', '터미널') 범주 ...). 이 교차 언어 식을 지원하는 Microsoft에 대한 언급이 없습니다. 또한 MS에서 정의한 DLookup 함수는 단일 값을 반환합니다. 작성한대로 엔진에 요청하는 것 같습니다. http://support.microsoft.com/kb/208786 : 에서 복사 한 DLookup() 함수는 두 개 이상의 레코드가 조건을 만족하는 경우에도 단일 필드에서 하나의 값을 반환합니다. 기준을 만족하는 레코드가 없거나 도메인에 레코드가 없습니다. D Lookup()은 Null을 반환합니다.

그래서 식에서 Null 값을 반환하면 어떻게 될까요? 두 번째 DCount 함수의 영어 tanslation은 다음과 같을 것입니다.AssetTagTable의 레코드 수를 알려주십시오. "SerialNumber"열 = 1732 및 열 "[DMax P/N]"= Null입니다. 그런 다음 해당 레코드 수를 3과 비교하십시오. 문제가 보이십니까?

2) 예기치 않은 결과가 나오면 코드를 단순화하고 변수 또는 사례 (예 : 텍스트 상자)에 값을 할당하는 것이 좋습니다. 그래서 양식에 2 개의 텍스트 상자를 배치하고 각각에 값을 할당하십시오. E.G. txtNumRecs, 그리고 텍스트 상자 txtNumRecs으로 txtCategory ,이 값을 할당합니다 : 2 텍스트 상자 만들기 DCOUNT을 ("*", "AssetTagTable", "serialNumber를 = '"& Me.SerialNumber & "'"). 텍스트 상자에 다음 값을 할당하십시오. DLookup ("[DMS P/N]", "InventoryList", "Category = 'PC'또는 범주 = 'Terminal')") 양식을 실행하십시오. 첫 번째 텍스트 상자에는 SerialNumber = Me.SerialNumber 인 레코드 수를 나타내는 값이 있습니다. 두 번째 텍스트 상자에있는 값에 지나치게 많을 수 있습니다. 모든 레코드의 일반 SQL 조회는 범주 = 'PC'또는 범주 = '터미널'이 많은 레코드를 반환 할 수 있다고 가정합니다. 이 함수는 이 1 레코드 만 반환한다는 것을 알고 있기 때문에 가능한 모든 레코드 중 어느 것이 반환 될지 어떻게 알 수 있습니까? 범주 = 'PC'인 레코드에 대해 [DMS P/N] 값을 반환하지만 참조 번호가 인 첫 번째 [DMS P/N] 값은 범주 = '터미널'인 레코드에 대한 값입니다. 혹은 그 반대로도. 상태 검사의이 부분은 절대로 True를 반환 할 수 없습니다.

실제로 범주 = 'PC'또는 범주 = '터미널', 인 InventoryList의 모든 레코드를 검사하고 각 값의 [DMS P/N] 값을 사용자 값과 비교하려면 다음을 작성해야합니다. 이것을 처리 할 함수 또는 2 VBA. 코드 작성 기능을 넘어서는 경우 전문가의 조언을 구하기 위해 저에게 연락 할 수 있습니다.

관련 문제