2012-08-07 42 views
1

我再次。當只選擇1個項目時,此代碼工作正常,但是當選擇多個項目時,我在下面的代碼行中得到錯誤「查詢表達式中的語法錯誤(逗號)」: intCountNull = DCount(「*」,「擦洗「 strCriteria &‘爲空’)多選列表框中的計數?

這裏是我的代碼:

Private Sub Command29_Click() 
Dim strCriteria As String 
Dim intCountNull As Integer 
Dim varItem As Variant 

'On Error GoTo Err_Command29_Click 

Me.Fields_Values.RowSource = "" 

For Each varItem In Me!List101.ItemsSelected 
strCriteria = strCriteria & "," & Me!List101.ItemData(varItem) 
Next varItem 

strCriteria = Right(strCriteria, Len(strCriteria) - 1) 

intCountNull = DCount("*", "Scrubbed", strCriteria & " Is Null") 
Fields_Values.RowSource = intCountNull & " null values found in " & strCriteria 

Exit_Command29_Click: 
    Exit Sub 
'Err_Command29_Click: 
    'MsgBox "Please select a field" 

末次

+0

你想要什麼?和每個標準或每個OR?甚至分開計數?你應該寫出strCriteria並調整你的代碼來給你需要的行。 – Fionnuala 2012-08-07 16:24:01

+0

我需要單獨的行和單獨的計數選擇每個項目。 – JenPhyllisB 2012-08-07 17:23:49

+0

那麼你如何看待這個'Fields_Values.RowSource'工作? – Fionnuala 2012-08-07 18:48:53

回答

0

...當超過一個項目被選中,我得到錯誤」語法錯誤(逗號)在查詢表達式中「,在以下代碼行上:intCountNull = DCount("*", "Scrubbed", strCriteria & " Is Null")

這很有道理。如果列表框選擇是「field1」,「field3」和「field4」,則DCount()會在查詢表達式'field1,field3,field4中爲空'時拋出錯誤#3075,「」語法錯誤(逗號)

DCount()表達想這個SELECT語句進行評估:

SELECT Count(*) 
FROM Scrubbed 
WHERE field1,field3,field4 Is Null 

和DB引擎肯定會抱怨說WHERE條款。你不能給它一個字段名稱列表,並詢問它是否爲列表Is Null。您將不得不分別詢問每個字段Is Null

這就是你爲什麼得到那個錯誤的解釋。不過,我認爲你需要改變你的方法。

構建RowSource值列表字符串爲Fields_Values當您迭代通過List101選定的項目。 (請確保您的值列表爲Fields_Values的行來源類型屬性。)以下是一個經過測試的樣本,它可以完成我認爲您需要的功能。

Private Sub Command29_Click() 
    Dim strCriteria As String 
    Dim intCountNull As Integer 
    Dim varItem As Variant 
    Dim strRowSource As String 

    Me.Fields_Values.RowSource = "" 
    For Each varItem In Me!List101.ItemsSelected 
     strCriteria = "[" & Me!List101.ItemData(varItem) & _ 
      "] Is Null" 
     intCountNull = DCount("*", "Scrubbed", strCriteria) 
     'Debug.Print strCriteria, intCountNull ' 
     strRowSource = strRowSource & ";" & intCountNull & _ 
      " null values found in " & _ 
      Me!List101.ItemData(varItem) 
    Next varItem 

    'Debug.Print strRowSource ' 
    If Len(strRowSource) > 0 Then 
     strRowSource = Mid(strRowSource, 2) 
     Me.Fields_Values.RowSource = strRowSource 
    End If 
    'Debug.Print strRowSource ' 
End Sub 

此外,我不明白爲什麼用戶甚至應該被允許單擊Command29除非List101包含選定的項目。因此請考慮禁用Command29,直到做出選擇。

Private Sub Form_Load() 
    Me.Command29.Enabled = False 
End Sub 

Private Sub List101_AfterUpdate() 
    Me.Command29.Enabled = (Me.List101.ItemsSelected.Count > 0) 
End Sub 

最後,我會建議你請你幫個忙,通過給你的控件有意義的名字...... Command29可能是cmdShowNullCountsList101可能是lstFieldNames。有意義的名字在處理數十個控件時特別有用。在幾個月後需要重新訪問表單設計時,您還應該發現它們很有幫助。任何未來需要接管的人都會感謝您的禮遇。

+1

您將需要設置RowSourceType,我估計。 – Fionnuala 2012-08-07 20:08:38

+0

HansUp的這段代碼完美地工作。感謝您的幫助。 – JenPhyllisB 2012-08-14 15:23:33