确定列表框绑定列的类型 VBA
Determine the type of a listbox bound column VBA
我正在根据多选列表框中的选择构建一个 SQL 字符串,为此,我试图确定我的列表框的绑定列的类型是否为字符串。
我写了下面的代码:
If lstBox.ItemsSelected.Count > 0 Then
lstVar = lstBox.ItemData(i)
Debug.Print VarType(lstVar)
For Each varItem In lstBox.ItemsSelected
strCrit = strCrit & "," & "'" & lstBox.ItemData(varItem) & "'"
Next varItem
' remove first comma
strCrit = Mid(strCrit, 2)
在debug.print VarType 语句中,它总是产生字符串类型,即使列表框的绑定列是一个自动编号字段。我想知道类型是否是数字而不是字符串,以便稍后在我的 SQL 语句中
SELECT … FROM … WHERE … IN (x,y,z)
我可以编写正确的 WHERE … IN 条件,以后不会导致类型不匹配。有没有办法准确确定列表框绑定列的变量类型?也许我应该通过查看列表框的行源类型来解决这个问题。因为我正在使用此函数遍历构建 where 条件的多个列表框,所以我需要它是动态和灵活的,因为某些列表框绑定列将是数字,而其他列将是字符串,所以我不能只是将其硬编码到循环中。
对于绑定列表框,您可以使用底层记录集获取绑定列的类型。
见以下代码:
Dim rs As Object 'most likely DAO.Recordset but could be ADODB.Recordset
With lstBox
Set rs = .Recordset
Debug.Print rs.Fields(.BoundColumn - 1).Type
End With
如果您使用的是 DAO 记录集,则打印 DAO.DataTypeEnum
,如果您使用的是 ADODB 记录集,则打印 ADODB.DataTypeEnum
。这些很容易转换为 VBA 数据类型。
Mathieu Guindon 关于使用参数的观点仍然存在。强烈推荐。
我正在根据多选列表框中的选择构建一个 SQL 字符串,为此,我试图确定我的列表框的绑定列的类型是否为字符串。 我写了下面的代码:
If lstBox.ItemsSelected.Count > 0 Then
lstVar = lstBox.ItemData(i)
Debug.Print VarType(lstVar)
For Each varItem In lstBox.ItemsSelected
strCrit = strCrit & "," & "'" & lstBox.ItemData(varItem) & "'"
Next varItem
' remove first comma
strCrit = Mid(strCrit, 2)
在debug.print VarType 语句中,它总是产生字符串类型,即使列表框的绑定列是一个自动编号字段。我想知道类型是否是数字而不是字符串,以便稍后在我的 SQL 语句中
SELECT … FROM … WHERE … IN (x,y,z)
我可以编写正确的 WHERE … IN 条件,以后不会导致类型不匹配。有没有办法准确确定列表框绑定列的变量类型?也许我应该通过查看列表框的行源类型来解决这个问题。因为我正在使用此函数遍历构建 where 条件的多个列表框,所以我需要它是动态和灵活的,因为某些列表框绑定列将是数字,而其他列将是字符串,所以我不能只是将其硬编码到循环中。
对于绑定列表框,您可以使用底层记录集获取绑定列的类型。
见以下代码:
Dim rs As Object 'most likely DAO.Recordset but could be ADODB.Recordset
With lstBox
Set rs = .Recordset
Debug.Print rs.Fields(.BoundColumn - 1).Type
End With
如果您使用的是 DAO 记录集,则打印 DAO.DataTypeEnum
,如果您使用的是 ADODB 记录集,则打印 ADODB.DataTypeEnum
。这些很容易转换为 VBA 数据类型。
Mathieu Guindon 关于使用参数的观点仍然存在。强烈推荐。