Ms access 带有选项的组合框,该选项只能通过编程方式选择,不能由用户在VBA Access中选择
我有一个有特殊要求的组合框。它需要一个项目,该项目只能由程序选择(基于检测到的某些标准),而不能由用户自己选择。在VBA Access中有什么方法可以做到这一点吗Ms access 带有选项的组合框,该选项只能通过编程方式选择,不能由用户在VBA Access中选择,ms-access,vba,Ms Access,Vba,我有一个有特殊要求的组合框。它需要一个项目,该项目只能由程序选择(基于检测到的某些标准),而不能由用户自己选择。在VBA Access中有什么方法可以做到这一点吗 我发现,如果没有更好的选择,我会做一些变通。我想要的是该选项甚至不可见。这种情况似乎很奇怪,我永远不会希望它出现在我的应用程序中。。。但目前接受的是所期望的方法是正确和良好的,并且需要一个解决方案 您可以通过一个隐藏控件(我假设是textbox)绑定到数据源表字段(因为您使用的是MS 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之外的所有选项
这只是一个概念。根据需要调整它。如果用户不应该访问它或无法更改值,为什么还要将其设置为组合框呢。只需使用一个文本框并显示您想要显示的值?用户可以选择多种选项。有一个程序必须检测到,它不能检测到。如果要设置此选项,则它将被锁定,并且只能通过编程方式取消设置