Ms access 在Access中打开表单时启用控件

Ms access 在Access中打开表单时启用控件,ms-access,forms,combobox,recordset,access-control,Ms Access,Forms,Combobox,Recordset,Access Control,我有一个窗体,我想根据ComboBox控件中的值启用/禁用它的控件。与表单中的所有其他控件一样,此组合框控件链接到表。在组合框的更改事件中,我放置了启用/禁用其他控件的代码 我遇到的问题是,当我打开表单时,控件未启用/禁用。我必须重新选择ComboBox值以启用或禁用所有其他控件 我注意到的一点是,ComboBox中的RecordSet控件通常不会更改为ComboBox的value属性中显示的值 我试过使用 combobox.recordset.filter=“Key=“&combobox.va

我有一个窗体,我想根据ComboBox控件中的值启用/禁用它的控件。与表单中的所有其他控件一样,此组合框控件链接到表。在组合框的更改事件中,我放置了启用/禁用其他控件的代码

我遇到的问题是,当我打开表单时,控件未启用/禁用。我必须重新选择ComboBox值以启用或禁用所有其他控件

我注意到的一点是,ComboBox中的RecordSet控件通常不会更改为ComboBox的value属性中显示的值

我试过使用
combobox.recordset.filter=“Key=“&combobox.value

但是我得到了错误
此类型的对象不支持操作。


更新 我认为我的问题在于如何访问combobox.recordset中的值。我的印象是combobox.recordset保存了从表中接收到的值。但是,它似乎保存了recordsource中的第一条记录


我猜我需要使用另一个记录集对象来搜索我需要的值。

一种方法是将combobox.change()放在form.current()方法中

然后,当表单启动并运行时,这就好像组合框已经被更改一样


我以前也做过类似的事情,但是我现在还没有代码。一旦我看到它,我会在这里发布更详细的信息,但我相信这就是我的做法。

一种方法是将combobox.change()放在form.current()方法中

然后,当表单启动并运行时,这就好像组合框已经被更改一样


我以前也做过类似的事情,但是我现在还没有代码。一旦我看到它,我会在这里发布更详细的信息,但我相信这就是我做的方式。

大多数访问控制事件不是由对控件的编程更改触发的。您可能希望调用代码以从窗体的加载事件启用控件

您没有提到正在使用的Access版本,但我不相信任何版本都有ComboBox的Recordset属性


是否要将组合框设置为特定值?

大多数访问控制事件不是由对控件的编程更改触发的。您可能希望调用代码以从窗体的加载事件启用控件

您没有提到正在使用的Access版本,但我不相信任何版本都有ComboBox的Recordset属性


您想将组合框设置为特定值吗?

请您解释一下您的组合框是什么类型的,您想做什么?例如,您是否有一个用于查找表单记录的未绑定组合框,或者有一个用于更新表中字段的绑定组合框?这由RowSource和ControlSource属性控制,组合框没有记录集属性。打开表单时,未绑定的组合框不会有值,从一个记录移动到另一个记录时,值也不会改变,但使用当前事件分配值非常容易

编辑
我还不清楚你想做什么。根据您的评论,在选择选项时修改控件是否有问题,或者在窗体打开时设置组合的值是否有问题?您是否希望更改组合框的行源,可能是您的原始帖子所暗示的吗?

您能解释一下您有什么类型的组合框以及您想做什么吗?例如,您是否有一个用于查找表单记录的未绑定组合框,或者有一个用于更新表中字段的绑定组合框?这由RowSource和ControlSource属性控制,组合框没有记录集属性。打开表单时,未绑定的组合框不会有值,从一个记录移动到另一个记录时,值也不会改变,但使用当前事件分配值非常容易

编辑
我还不清楚你想做什么。根据您的评论,在选择选项时修改控件是否有问题,或者在窗体打开时设置组合的值是否有问题?是否要更改组合的行源(可能是原始帖子所暗示的)

'Debug here for combobox.value(Ctrl+G用于调试窗口)

Debug.print combobox.value

me.filter=“Key=”&combobox.value


'根据ms access版本的不同,可能会重新加载或刷新me.refresh

'检查表单属性上的密钥预览

'Debug here for combobox.value(Ctrl+G用于调试窗口)

Debug.print combobox.value

me.filter=“Key=”&combobox.value


“根据ms access版本,可能会重新加载或刷新me.reload或me.refresh”

在评论中,lamcro观察到梳子盒是否有记录集的问题:

当我闯入窗体VB代码时 和“添加监视”CB控件 记录集属性在其中。我可以 甚至可以进去看看它自己的 财产

我在设置监视列表时看到了它,但组合框的记录集无法通过代码访问或更改。为了过滤组合框,您需要使用它的行源

这可以通过以下两种方式之一实现:

  • 使用事件动态为组合框分配新的行源,或
  • 在其他组合框的Rowsource的WHERE子句中,使用对要筛选其值的控件的引用
  • 假设您有CMBCombox1,当您在其中选择一个值时
      Private Sub cmbComboBox1_AfterUpdate()
        Dim strRowsource As String
    
        strRowsource  = "SELECT * FROM MyTable"
        If Not IsNull(Me!cmbComboBox1) Then
           strRowsource  = strRowsource & " WHERE MyField = " & Me!cmbComboBox1
        End If
        Me!cmbComboBox2.Rowsource = strRowsource
      End Sub
    
    SELECT * FROM MyTable 
    WHERE (MyField=[Forms]![MyForm]![cmbComboBox1] 
            AND IsNull([Forms]![MyForm]![cmbComboBox1])=False) 
       OR IsNull([Forms]![MyForm]![cmbComboBox1])=True
    
      Private Sub cmbComboBox1_AfterUpdate()
        Me!cmbComboBox2.Requery
      End Sub
    
    PARAMETERS [Forms]![MyForm]![cmbComboBox1] Long;
    SELECT * FROM MyTable 
    WHERE (MyField=[Forms]![MyForm]![cmbComboBox1] 
            AND IsNull([Forms]![MyForm]![cmbComboBox1])=False) 
       OR IsNull([Forms]![MyForm]![cmbComboBox1])=True