将选定值传递给第二个组合框以过滤可用值

Pass a selected value to a second combo-box to filter available values

我正在 Access 2013 中创建一个表单,该表单允许用户 select 之前输入的记录,他们希望为其输入额外的相关数据。底层 table 有数千条记录,所以我想使用两个组合框使 selection 更容易。根据我在别处找到的多个帖子,我应该能够将 cboGetSite 组合框的行源设置为 table,列出所有可用站点。然后,我将 AfterUpdate() 事件设置为使用 selected 站点将第二个组合框过滤到一个列表,其中包括对该站点的可用访问,例如:

Private Sub cboGetSite_AfterUpdate()
    Me.cboGetDate.RowSource = “SELECT VisDate FROM” & _
                    “qrySiteVisits WHERE location =” & _
                    Me.cboGetSite & _
                    “ORDER BY VisDate”
End Sub

当我 select cboGetSite 组合框中的一个值时,我收到一条错误消息,指出

“作为事件 属性 设置输入的更新后表达式产生了以下错误:外部过程无效。 *表达式不能产生宏名称、用户定义函数名称或[事件过程]。 *评估函数、事件或宏时可能出错。”

任何人都可以指出我可能哪里出错了吗?我不使用 VBA,所以这对我来说有点困难。我正在遵循在几个在线线程中找到的指南。请不要回应,“好吧,错误显然告诉你……”如果这是显而易见的,我就不会问了。

有人可以指导我完成这些步骤吗?给定一个列出可用站点和访问日期的查询,我需要:

  1. Select 来自组合框的站点从而设置 cboGetSite 值
  2. 将 cboGetSite 传递给 cboGetDate 组合框,从而筛选出一组访问日期。
  3. Select 设置 tempVar(使用 SetTempVar())的日期,然后将其设置为后续表单中的值,以将相关数据添加到多个 table 之一,并将其​​链接回来通过 cboGetDate 变量访问正确的访问记录。

如果您的 vba-代码被涂成红色,则它是无效的!

在vbaide中使用Debug->Compile ...编写代码后,会显示语法错误!

您从哪里复制了该代码?它使用了错误的双引号(ASCII 字符 147、148 而不是 34 (Shift+'))

之后您将收到另一个错误,因为您在 sql-string "SELECT VisDate FROM" & "qrySiteVisits WHERE location =" gets "SELECT VisDate FROMqrySiteVisits WHERE location =" 中缺少空格。 FROM 后面少了一个空格。

如果cboGetSitelocation是数字,此代码将起作用。

Private Sub cboGetSite_AfterUpdate()
Dim SQL as String
SQL =  "SELECT VisDatem, id FROM " & _
                "qrySiteVisits WHERE location = " & _
                Me.cboGetSite & _
                " ORDER BY VisDate"
'If location and cboGetSite are strings use this: SQL =  "SELECT VisDate, id FROM " & _
                "qrySiteVisits WHERE location = '" & _
                Me.cboGetSite & _
                "' ORDER BY VisDate"
Debug.Print SQL ' shows the string in immidiate window in vba ide
Me.cboGetDate.RowSourceType = "Table/Query" 
Me.cboGetDate.RowSource = SQL
End Sub

如果先选择cboGetDatecboGetSite为空)会怎样?什么都不显示、全部显示或移动到 cboGetSite?