Ms access 带有选项的组合框,该选项只能通过编程方式选择,不能由用户在VBA Access中选择

Ms access 带有选项的组合框,该选项只能通过编程方式选择,不能由用户在VBA Access中选择,ms-access,vba,Ms Access,Vba,我有一个有特殊要求的组合框。它需要一个项目,该项目只能由程序选择(基于检测到的某些标准),而不能由用户自己选择。在VBA Access中有什么方法可以做到这一点吗 我发现,如果没有更好的选择,我会做一些变通。我想要的是该选项甚至不可见。这种情况似乎很奇怪,我永远不会希望它出现在我的应用程序中。。。但目前接受的是所期望的方法是正确和良好的,并且需要一个解决方案 您可以通过一个隐藏控件(我假设是textbox)绑定到数据源表字段(因为您使用的是MS Access,我假设是绑定表单,但这并不能保证),

我有一个有特殊要求的组合框。它需要一个项目,该项目只能由程序选择(基于检测到的某些标准),而不能由用户自己选择。在VBA Access中有什么方法可以做到这一点吗


我发现,如果没有更好的选择,我会做一些变通。我想要的是该选项甚至不可见。

这种情况似乎很奇怪,我永远不会希望它出现在我的应用程序中。。。但目前接受的是所期望的方法是正确和良好的,并且需要一个解决方案

您可以通过一个隐藏控件(我假设是textbox)绑定到数据源表字段(因为您使用的是MS Access,我假设是绑定表单,但这并不能保证),我们将调用txtYounoseme

让我们将要让系统选择的值(而不是用户)称为NoPickMe

现在,您需要让您的用户能够选择“大多数选项”——根据需要设置组合框(cboYesYouSeeMe)并保持其未绑定状态。NoPickMe不是该列表中的选项

最后,遗憾的是,您必须将一些逻辑封装到为cboYesYouSeeMe处理AfterUpdate事件中。当您希望允许用户在cboYesYouSeeMe中选择一个选项时,需要将所选的值传输到隐藏绑定控件txtyounoseme。在AfterUpdate事件中执行此操作

当您希望让系统选择“隐藏”值NoPickMe(用户不应该看到)时,就这样吧。。。将该值放入隐藏的TXTYOUNOSEME中。我不知道你(在这种情况下)想在cboYesYouSeeMe中显示什么

当记录保存时,TXTYOUNOSEME驱动保存到数据库的值。如果不涉及数据库,则忽略对数据绑定的引用


虽然我可能忘记解释一两个细节,但这个解决方案是有效的。希望你能理解。

这种情况似乎很奇怪,我永远也不希望它出现在我的应用程序中。。。但目前接受的是所期望的方法是正确和良好的,并且需要一个解决方案

您可以通过一个隐藏控件(我假设是textbox)绑定到数据源表字段(因为您使用的是MS Access,我假设是绑定表单,但这并不能保证),我们将调用txtYounoseme

让我们将要让系统选择的值(而不是用户)称为NoPickMe

现在,您需要让您的用户能够选择“大多数选项”——根据需要设置组合框(cboYesYouSeeMe)并保持其未绑定状态。NoPickMe不是该列表中的选项

最后,遗憾的是,您必须将一些逻辑封装到为cboYesYouSeeMe处理AfterUpdate事件中。当您希望允许用户在cboYesYouSeeMe中选择一个选项时,需要将所选的值传输到隐藏绑定控件txtyounoseme。在AfterUpdate事件中执行此操作

当您希望让系统选择“隐藏”值NoPickMe(用户不应该看到)时,就这样吧。。。将该值放入隐藏的TXTYOUNOSEME中。我不知道你(在这种情况下)想在cboYesYouSeeMe中显示什么

当记录保存时,TXTYOUNOSEME驱动保存到数据库的值。如果不涉及数据库,则忽略对数据绑定的引用

虽然我可能忘记解释一两个细节,但这个解决方案是有效的。希望您能理解。

您可以在组合框中添加一个“更改时”事件。假设只能通过编程方式选择的选项是“仅程序项”。我还假设您有一个以前的字段,我们可以将焦点移回该字段。您没有提到此选项的条件是什么,因此为了参数起见,我假定前面的字段必须是1而不是0(您必须更改if…then子句以适合您的条件)

当满足条件时,您可以在不同的事件中使用
me.cbo\u list.value=“program only option”

您可以在组合框中添加“更改时”事件。假设只能通过编程方式选择的选项是“仅程序项”。我还假设您有一个以前的字段,我们可以将焦点移回该字段。您没有提到此选项的条件是什么,因此为了参数起见,我假定前面的字段必须是1而不是0(您必须更改if…then子句以适合您的条件)


当满足条件时,您可以在不同的事件中使用
me.cbo\u list.value=“program only option”

您应该尝试将业务逻辑移出表单。此任务需要两个函数

Function SelectAndLock(ByRef SelectPicker As ComboBox, Id As Long)

    Dim SQL_GET As String
    SQL_GET = "SELECT ID, Text From ComboBoxValues WHERE [ID] = " & Id

    SelectPicker.RowSourceType = "Table/Query"
    SelectPicker.RowSource = SQL_GET
    SelectPicker.Value = Id
    SelectPicker.enabled = False

End Function

Function PopulateSelectPicker(ByRef SelectPicker As ComboBox)

    Dim SQL_GET As String
    SQL_GET = "SELECT ID, Text From ComboBoxValues WHERE [ID] not in (your system ids);"

    SelectPicker.RowSourceType = "Table/Query"
    SelectPicker.RowSource = SQL_GET
    SelectPicker.Value = "" ' or null if your field is nullable
    SelectPicker.enabled = True

End Function
现在,如果您的模型已决定“系统”条件,您将调用

call SelectAndLock(SelectPicker,id)
它将选择系统选择并锁定组合框的id

任何其他条件或默认情况下,只需调用

call PopulateSelectPicker(SelectPicker)
它将列出除用户不应该看到的系统ID之外的所有选项


这只是一个概念。根据需要调整它。

您应该尝试将业务逻辑移出表单。此任务需要两个函数

Function SelectAndLock(ByRef SelectPicker As ComboBox, Id As Long)

    Dim SQL_GET As String
    SQL_GET = "SELECT ID, Text From ComboBoxValues WHERE [ID] = " & Id

    SelectPicker.RowSourceType = "Table/Query"
    SelectPicker.RowSource = SQL_GET
    SelectPicker.Value = Id
    SelectPicker.enabled = False

End Function

Function PopulateSelectPicker(ByRef SelectPicker As ComboBox)

    Dim SQL_GET As String
    SQL_GET = "SELECT ID, Text From ComboBoxValues WHERE [ID] not in (your system ids);"

    SelectPicker.RowSourceType = "Table/Query"
    SelectPicker.RowSource = SQL_GET
    SelectPicker.Value = "" ' or null if your field is nullable
    SelectPicker.enabled = True

End Function
现在,如果您的模型已决定“系统”条件,您将调用

call SelectAndLock(SelectPicker,id)
它将选择系统选择并锁定组合框的id

任何其他条件或默认情况下,只需调用

call PopulateSelectPicker(SelectPicker)
它将列出除用户不应该看到的系统ID之外的所有选项


这只是一个概念。根据需要调整它。

如果用户不应该访问它或无法更改值,为什么还要将其设置为组合框呢。只需使用一个文本框并显示您想要显示的值?用户可以选择多种选项。有一个程序必须检测到,它不能检测到。如果要设置此选项,则它将被锁定,并且只能通过编程方式取消设置