访问控制属性可以设置为True / False,但不能设置为布尔变量?

时间:2012-11-02 17:25:34

标签: vba ms-access access-vba

在我的Access数据库中,我有一个在模块(Main)中定义的全局变量(Global allowEditing as Boolean)。我设置了这个变量,然后我想在表单级别使用它来禁用一些按钮。我遇到了这个问题。

For Each ctl In Me.Controls
    ctl.Enabled = False            'Works for True or False            
    ctl.Enabled = allowEditing     'Throws error               
  Next

抛出的错误是:

  

运行时错误'438':对象不支持此操作   财产或方法。

这里发生了什么,我如何使用布尔值?

3 个答案:

答案 0 :(得分:3)

当您尝试设置不存在的属性时会发出错误438,例如启用标签控件。

试试这个

For Each ctl In Me.Controls
  If TypeOf ctl Is TextBox Then
    ctl.Enabled = False            'Works for True or False
    ctl.Enabled = allowEditing     'Throws error
  End If
Next

答案 1 :(得分:1)

听起来像是一个范围问题。如果要在多个表单之间全局使用此布尔值,我建议创建一个Access表来保存全局状态变量。只需在表上运行查询即可获取值。

答案 2 :(得分:1)

每个控件都有ControlType属性。您可以利用该属性仅禁用从支持Enabled属性的控件中选择的那些属性。此过程将为复选框,组合,列表框和文本框设置Enabled属性。

For Each ctl In Me.Controls
    With ctl
        Select Case .ControlType
        Case acCheckBox, acComboBox, acListBox, acTextBox
            .Enabled = allowEditing
        Case Else
            ' pass
        End Select
    End With
Next