【问题标题】:MSAccess VBA, filtering query results via combo box (text)MSAccess VBA,通过组合框过滤查询结果(文本)
【发布时间】:2018-03-12 16:16:16
【问题描述】:

我想根据组合框文本值过滤查询中的日期值(文本)。 这是我所拥有的:

ComboBoxTimePeriod(ID [num],TimePeriod [text])。

在 ComboBox 中,我选择时间段,例如“16.10.2017-15.11.2017”。

在查询中,我有一个日期字段,例如“20.10.2017”(文本)。

我想要的是编写一个 SQL 代码来搜索所有日期在 TimePeriod 范围内的记录。

到目前为止,想法是从 TimePeriod 中提取 SatrtDate 和 EndDate,如下所示:

    Dim strStartDate As String
    Dim strEndDate As String

    strStartDate = Mid(Me.cboTimePeriod.Text, 1, 10)
    strEndDate = Mid(Me.cboTimePeriod.Text, 12, 10)

现在从 TimePeriod“16.10.2017-15.11.2017”开始,我有 StartDate (16.10.2017) 和 EndDate (15.11.2017)。

我想过滤所有在这两个日期内有日期的记录。 这就是我需要你们的地方。

请注意,这与我上一个问题不同,我在上一个问题中搜索带有 TimePeriodID (Subform filtering based off multiple parameters (Combobox AND Textbox)) 的记录。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    始终将日期处理为日期,而不是文本:

    Dim StartDate As Date
    Dim EndDate As Date
    StartDate = DateValue(Split(Me.cboTimePeriod.Value, "-")(0))
    EndDate = DateValue(Split(Me.cboTimePeriod.Value, "-")(1))
    

    构建你的过滤器:

    ... " Between #" & Format(StartDate, "yyyy\/mm\/dd") & "# And #" & Format(EbdDate, "yyyy\/mm\/dd") & "#"
    

    过滤表单:

    Me.Filter = "[Date Field] Between #" & Format(StartDate, "yyyy\/mm\/dd") & "# And #" & Format(EbdDate, "yyyy\/mm\/dd") & "#"
    Me.FilterOn = True
    

    并确保您的 日期字段 是日期数据类型,而不是文本。

    【讨论】:

    • StartDate 和 EndDate 在将 .Value 更改为 .text 后起作用。当它是值时,它是 ID,而不是文本,所以结果是“00:00:00”。现在好了。由于我是编程新手,因此仍在努力将其应用于代码。
    • 无法让它工作。这是我的修改,因为我在一个表单中有多个子表单: Me.qry_FSW_services_subform.Form.Filter = "[ qry_FSW_services_subform].[V_LOCATION_VISIT_DATE] Between #" & Format(StartDate, "yyyy\/mm\/dd") & "# And #" & Format(EndDate, "yyyy\/mm\/dd") & "#"
    • 应该是:Me!NameOfYourSubformControl.Form.Filter = "[V_LOCATION_VISIT_DATE] Between ...
    • 在即时窗口结果是:[V_LOCATION_VISIT_DATE] ## 和 ## 之间
    • 在即时窗口中与您的 mod 相同的结果:[V_LOCATION_VISIT_DATE] ## 和 ## 之间
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2014-03-20
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多