...複数の項目を選択すると、次のコード行に「クエリ式の構文エラー(カンマ)」というエラーが表示されます。intCountNull = DCount("*", "Scrubbed", strCriteria & " Is Null")
それは理にかなっている。リストボックスの選択が「field1」、「field3」、および「field4」の場合、DCount()
エラー#3075「クエリ式'field1、field3、field4 Is Null'の構文エラー(コンマ)」がスローされます。
式は次の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
。意味のある名前は、数十のコントロールを扱う場合に特に役立ちます。また、数か月後にフォームのデザインを再検討する必要がある場合にも役立ちます。将来引き継ぐ必要がある他の人はあなたの礼儀に感謝します。