2013-10-15 289 views
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

Ricardo; 您沒有提及這是否是表單或報表上的文本框中的公式;或者如果您正在編寫VBA代碼,則爲 。我的回答會對這兩種情況會有很大的不同。 通常,當我看到使用舊(Access 2003)函數的人時,它能夠將所有內容寫入表單中。所以,我會假設情況是這樣的。

有幾個問題: 1)您正在MS DLookUp函數中使用SQL語法(「Category In()」)作爲第三個參數(...「Category In('PC','Terminal') ...) 我沒有發現微軟支持這種跨語言表達 另外,由MS定義的DLookup函數返回一個值 就像你寫的那樣,你似乎在問引擎 查看本聲明本人複製http://support.microsoft.com/kb/208786: 即使多個記錄滿足條件,DLookup()函數也會從單個字段返回一個值 如果沒有記錄滿足條件,或者域不包含記錄,D Lookup()返回一個Null。

那麼,如果你的表達式返回一個空值呢?你的第二個 DCount函數的英文翻譯將如下所示: 給我AssetTagTable中的記錄數列「SerialNumber」= 1732 AND列「[DMax P/N]」= Null。然後將該記錄數與數字3進行比較。 您是否看到此問題?

2)當遇到意想不到的結果時,簡化代碼並將值分配給變量 或您的案例(比如說文本框)總是一個好主意。 因此,將2個文本框放在您的表單上,併爲每個文本賦值。 E.G. 創建文本框2:txtNumRecs,和txtCategory 到TextBox txtNumRecs,分配該值: DCOUNT( 「*」, 「AssetTagTable」, 「的SerialNumber = '」 & Me.SerialNumber & 「'」)。 對文本框txtCategory,分配此值: 運行您的窗體。運行您的窗體。 第一個文本框的值將代表SerialNumber = Me.SerialNumber的記錄數。 您可能會驚訝於第二個文本框中的值。考慮一下對所有記錄進行的一般SQL查找,其中類別='PC'或類別='終端'可以返回許多記錄。既然我們知道這個函數 只返回1條記錄,我們怎麼可能知道它會返回哪一個可能的記錄呢? 假設它返回類別爲'PC'的記錄的[DMS P/N]值,但您引用的第一個[DMS P/N]值爲類別='終端'的記錄。或相反亦然。 您的條件檢查的這部分可能永遠不會返回True。

如果您確實希望檢查InventoryList中Category ='PC'或Category ='Terminal', 的所有記錄,並將每個記錄的[DMS P/N]值與您的值進行比較,則必須寫入一個VBA中的函數或2來處理這個問題。 如果超出了您的代碼編寫能力,您可以聯繫我進行專業諮詢。