Vba 如何从函数发送查询字符串

Vba 如何从函数发送查询字符串,vba,ms-access,ms-access-2007,Vba,Ms Access,Ms Access 2007,我很难想出一个好的标题,但我希望我能更好地解释这种情况。我目前有一个查询的条件是11:00-21:00或11:01-21:00,执行时效果非常好,但是我在多个查询中需要这个条件,因此我决定使用如下函数 Function timeIntervals() timeIntervals = "11:00 - 21:00" & " Or " & "11:01 - 21:00" End Function 并在每个查询中调用它,因此每次我需要修改这个字符串时,我都可以通过一个实例

我很难想出一个好的标题,但我希望我能更好地解释这种情况。我目前有一个查询的条件是11:00-21:00或11:01-21:00,执行时效果非常好,但是我在多个查询中需要这个条件,因此我决定使用如下函数

Function timeIntervals()

    timeIntervals = "11:00 - 21:00" & " Or " & "11:01 - 21:00"

End Function

并在每个查询中调用它,因此每次我需要修改这个字符串时,我都可以通过一个实例进行修改,但是当在上面运行这个字符串时,它不起作用,我假设它是由Or上的引号引起的,我尝试了三重引号和chr34,但是它不起作用,是否有人可以建议解决方法谢谢

无论您如何使用引号,这都是行不通的,因为或将作为字符串返回,而不是您想要的布尔值或。您可以使用带有两个文本框的隐藏表单,然后您可以说:

WHERE timeIntervals = Forms!MyForm!Text1 Or Forms!MyForm!Text2

只要表单保持打开状态,您的查询和基于它们的任何表单或报表都将正常工作,而且,在不修改代码的情况下更改间隔将非常容易。

无论您如何使用引号,这都不会正常工作,因为或将作为字符串返回,而不是布尔值或您想要的值。您可以使用带有两个文本框的隐藏表单,然后您可以说:

WHERE timeIntervals = Forms!MyForm!Text1 Or Forms!MyForm!Text2

只要表单保持打开状态,您的查询和基于它们的任何表单或报表都将正常工作,而且,在不修改代码的情况下更改间隔将非常容易。

如Remou所述,您将无法使其正常工作。如果您确实希望通过VBA函数执行检查,可以编写如下内容:

Function timeIntervals(Value) As Boolean
    If Value = "11:00 - 21:00" Or Value = "11:01 - 21:00" Then
        timeIntervals = True
    End If
End Function
传递要检查的值,如果结果函数为true,则显示该行。类似于:where timeIntervalsmyvalue=true

也许最好的解决办法是为时间间隔制作一个表格。然后在查询中,只需编写如下内容:

其中MyValue插入从时间间隔中选择时间值


使用后一种方法,您可以更新表,该表将更新所有用户的结果,并且不需要重新发布前端。

如Remou所示,您将无法使其正常工作。如果您确实希望通过VBA函数执行检查,可以编写如下内容:

Function timeIntervals(Value) As Boolean
    If Value = "11:00 - 21:00" Or Value = "11:01 - 21:00" Then
        timeIntervals = True
    End If
End Function
传递要检查的值,如果结果函数为true,则显示该行。类似于:where timeIntervalsmyvalue=true

也许最好的解决办法是为时间间隔制作一个表格。然后在查询中,只需编写如下内容:

其中MyValue插入从时间间隔中选择时间值


使用后一种方法,您可以更新表格,该表格将更新所有用户的结果,并且不需要重新发布前端。

这与我键入整个字符串是一样的,但感谢您的帮助。不,它没有。您可以设置该值一次。您甚至可以通过设置控件源属性来存储该值。创建一个需要编辑的函数通常被认为是不好的做法:因此,每次我需要修改这个字符串时,我都可以通过一个实例来完成。这与我键入整个字符串是一样的,但是谢谢你的帮助。不,没有。您可以设置该值一次。您甚至可以通过设置控件源属性来存储该值。一般认为,创建一个必须编辑的函数不是一个好的做法:因此,每次我需要修改这个字符串时,我都可以通过这个实例来完成。请注意,使用这种方法无法分发已编译的前端。如果时间间隔是常数,则可以简单地将其添加到查询中,如果存在变量,则不应对其进行硬编码。第一个示例就是这样,这就是为什么我推荐其他方法。但是,如果您使用我的后一个建议,即在后端创建一个新表,那么分发前端不会有任何障碍。请注意,使用这种方法分发编译后的前端是不可能的。如果时间间隔是常数,则可以简单地将其添加到查询中,如果存在变量,则不应对其进行硬编码。第一个示例就是这样,这就是为什么我推荐其他方法。但是,如果您使用我的后一个建议,在后端创建一个新表,则不会妨碍前端的分发。