我再次。当只选择了1个项目时,此代码可以正常工作,但是当选择了多个项目时,我会在以下代码行中收到错误“查询表达式中的语法错误(逗号)”: intCountNull = DCount(“*”,“Scrubbed”,strCriteria&“Is Null”)
这是我的代码:
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"
End Sub
答案 0 :(得分: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
可以是cmdShowNullCounts
而List101
可以是lstFieldNames
。当你处理几十个控件时,有意义的名字特别有用。当您需要在几个月后重新访问表单设计时,您还应该发现它们很有用。其他任何将来接管的人都会感激你的礼貌。