【问题标题】:Populate and sort a ComboBox from another ComboBox, VBA从另一个 ComboBox,VBA 填充和排序 ComboBox
【发布时间】:2017-10-02 22:21:32
【问题描述】:

Hi Everyone I am having trouble getting a ComboBox to sort, when another combobox is selected. 我认为我有正确的 SQL 语法,但我似乎无法让 vba 运行它;目前,vba 会返回记录集中的所有状态,而与公司无关。

Private Sub CboCountry_Click()
Set db = CurrentDb
Dim SQLStr As String

Set RsState = db.OpenRecordset("T2States", dbOpenSnapshot, dbSeeChanges)

 'populates combobox with recordset, that is defined by the country input from the form

RsState.MoveFirst
Do While Not RsState.EOF
    Me.CboState.RowSource = Me.CboState.RowSource & RsState("StateID") & ";" & RsState("State") & ";"
    RsState.MoveNext
Loop

我认为这是正确的 SQL 字符串,但我无法让它工作。

'SQLStr = "SELECT T2States.StateID, T2States.States, T2States.CountryID" & _
            " FROM T2States GROUP BY T2States.StatesID" & _
            " WHERE T2States.CountryID = """ & Me.CboCountry.Value & """"

任何帮助将不胜感激。

编辑#1 请参阅下面的完整代码,当我将 SQLStr 替换为 Openrecordset 时弹出的错误是运行时错误“3078”,Microsoft Access 数据库引擎找不到输入表或查询“SQLStr”。确保它存在并且其名称拼写正确。 应该发生的是,当从 CboCountry 组合框中选择一个国家/地区时,它将通过按 CountryID 对记录集进行排序来加载 CboState 组合框

两个代码部分见下文

    Private Sub Form_Load()

Set db = CurrentDb
Set RsCompany = db.OpenRecordset("T1Company", dbOpenDynaset, dbSeeChanges)
Set RsCountry = db.OpenRecordset("T2Countries", dbOpenSnapshot, dbSeeChanges)
Set RsAddress = db.OpenRecordset("T1Addresses", dbOpenDynaset, dbSeeChanges)
Set RsAddressType = db.OpenRecordset("T2AddressType", dbOpenSnapshot, dbSeeChanges)
Set RsCompanyAddress = db.OpenRecordset("T3Company_Address", dbOpenDynaset, dbSeeChanges)

Me.CboCountry = Null
Me.TxtAddress1 = Null
Me.TxtAddress2 = Null
Me.TxtAddress3 = Null
Me.TxtCity = Null
Me.CboAddressType = Null
Me.CboCountry = Null
Me.CboState = Null
Me.TxtPostalCode = Null
Me.TxtCompanyID = Null
Me.TxtLegalName = Null
Me.TxtNickname = Null
Me.TxtAddressID = Null

    RsCountry.MoveFirst
    Do While Not RsCountry.EOF
        Me.CboCountry.RowSource = Me.CboCountry.RowSource & RsCountry("CountryID") & ";" & RsCountry("Country") & ";"
        RsCountry.MoveNext
    Loop

    RsAddressType.MoveFirst
    Do While Not RsAddressType.EOF
        Me.CboAddressType.RowSource = Me.CboAddressType.RowSource & RsAddressType("AddressTypeID") & ";" & RsAddressType("AddressType") & ";"
        RsAddressType.MoveNext
    Loop
Me.TxtLegalName.SetFocus

End Sub



Private Sub CboCountry_Click()
Set db = CurrentDb
Dim SQLStr As String

'SQLStr = "SELECT T2States.StateID, T2States.State, T2States.CountryID" & _
            " FROM T2States" & _
            " WHERE T2States.CountryID = """ & Me.CboCountry.Value & """"

Set RsState = db.OpenRecordset("T2States", dbOpenDynaset, dbSeeChanges)

    'populates combobox with recordset, that is defined by the country input from the form

    RsState.MoveFirst
    Do While Not RsState.EOF
        Me.CboState.RowSource = Me.CboState.RowSource & RsState("StateID") & ";" & RsState("State") & ";"
        RsState.MoveNext
    Loop

End Sub

【问题讨论】:

    标签: sorting ms-access combobox vba


    【解决方案1】:


    让我们看看
    1- 确保您必须附加

    Having T2States.States, T2States.CountryID
    


    2- 存在错误,列名中有多余的“s”:

    GROUP BY T2States.StatesID
    


    3- 输入所有代码,我会与您核对您遗漏的内容。


    最好的问候

    【讨论】:

    • 请参阅编辑#1,这些是适用的代码,在表单加载时初始化 CboCountry,一旦从组合框中选择国家,它应该加载 CboState,但我得到运行时错误。
    【解决方案2】:

    事实证明这是在属性表中数据选项卡下的快速修复,行源类型必须从“值”更改回“表/查询”。

    有 VBA 可以解决这个问题,但它只是简单地更改该行源。

    混淆的原因是我所有的组合框都未绑定,我将它们与 VBA 记录集绑定,因此行源必须是一个值列表 - 本质上 VBA 是每次加载时都编写列表。

    当我开始使用 SQL 生成记录集时,即使它在 VBA 中,我也不得不将属性更改回 Table/Query。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多