我有一个Access数据库,我有一个带有文本框(名为c1)和按钮的表单。当我单击按钮时,它会打开一个数据表表单,其中包含按文本框值过滤的信息。
按钮vba如下所示:
c1.Value = Replace(c1.Value, ",", " Or ")
DoCmd.OpenForm ("dsForm")
数据表背后的查询在设计视图中看起来像这样:
Field: Name1 | Name2
Criteria: | Like [Forms]![Menu]![c1].[value]
这样我以后可以将此查询的结果导出为excel。
所以我的问题是我想在文本框中输入值并用逗号分隔它们,后来将变成一个或者通过vba。为什么我用1个文本框而不是多个文本框这样做,是因为我可以有很多我想要搜索的值。
现在它可以在文本框中输入一个值,但是当我输入2个值时,它不起作用。我很确定查询将整个语句作为一个字符串,例如,如果我输入110,220它应该是Like" 110"或" 220",但在查询上它会像" 110或220"。
我已尝试将字段设置为字符串或数字。我如何操纵来自vba的查询条件?
答案 0 :(得分:1)
我建议使用IN语句而不是OR编写SQL字符串,并使用OpenArgs事件将数据从主表单传递到数据表表单。
主表单按钮代码
Dim sql as String
sql = "Select * From [table name] Where Name2 IN (" & c1 & ")"
DoCmd.OpenForm "dsForm", acFormDS, , , , , sql
数据表表单(dsForm)代码 - 使用Form_Load事件。
Private Sub Form_Load()
Me.RecordSource = Me.OpenArgs
End Sub
IN语句允许您使用逗号。 OpenArgs事件允许您将值从一个表单传递到另一个表单。
答案 1 :(得分:0)
实际上我的第一种方法很糟糕,将值读入这样的数组:
Sub y()
a = "a,b,c,d"
'Split into 1d Array
b = Split(a, ",", , vbTextCompare)
For c = 0 To UBound(b)
Debug.Print b(c)
Next c
End Sub
您可以像调试.print循环一样遍历数组,并分别使用每个值。