禁用控件后在 Access VBA 中显示禁用的控件

Posted

技术标签:

【中文标题】禁用控件后在 Access VBA 中显示禁用的控件【英文标题】:Gray out disabled Controls in Access VBA after disabling the Control 【发布时间】:2017-03-23 16:36:29 【问题描述】:

我有一个带有许多选项卡和子表单的 MS Access 表单。我为禁用/启用所有子窗体上的所有控件的按钮编写了一些 VBA 代码。出于某种原因,如果您手动将其 Enabled 属性设置为 False,按钮不会像它们那样变灰。有谁知道如何使用 VBA 代码实现这一点?

谢谢!

下面是我使用的代码:

Private Sub Command137_Click()
    Dim ctrlControl As Control
    For Each ctrlControl In Me.Controls
    On Error GoTo err:
    If ctrlControl.ControlType = acTabCtl Or ctrlControl.Name =     "Command9" Then

    Else
        ctrlControl.Enabled = False      
    End If
Continue:
Next
Exit Sub
err:
    Debug.Print err.Description
    Resume Continue
End Sub

【问题讨论】:

您如何启用/禁用它?我一直这样做,从未见过这个问题。 我刚刚添加了我在原始帖子中使用的 VBA 代码。谢谢! 查看是否所有控件都在循环中:On Error GoTo err 之前放入:Debug.Print ctrlControl.Name & vbCrLf 以查看所有控件实际上都在迭代。 我调试过,都是迭代的。它们都没有落入错误陷阱。按钮的禁用实际上有效,但按钮不会变灰。是否有另一个属性可以控制它?我注意到当我手动更改按钮控件以禁用它时,它会变灰。 我不知道...此代码应该适用于一种形式的控件,主要形式,由Me 关键字引用。它不应该影响子表单上的控件。如何使用此代码禁用子表单上的按钮? 【参考方案1】:

我也遇到了同样的问题。不过,我想出了一个绕过它的方法。

首先在一个模块中定义一些公共变量:

Option Explicit
Public greyout, white As Long

然后在你的 Form_Load() 子中

Public Sub Form_Load()
    'color RGB definition
    greyout = RGB(210, 210, 210)
    white = RGB(255, 255, 255)
End Sub

然后当您在文本/组合框上使用 .enable 时,请执行此操作

me.textbox.enabled = false
me.textbox.backcolor = greyout

me.textbox.enabled = true
me.textbox.backcolor = white

希望对你有帮助

【讨论】:

【参考方案2】:

您正在搜索错误的 controlType。使用“acCommandButton”而不是“acTabCtrl”。 (我添加了一个 ELSE 来启用其他所有功能)

IF ctrlControl.ControlType = acCommandButton THEN
   ctrControl.enabled = false
ELSE
   ctrControl.enabled = true
END IF

【讨论】:

您最初的问题是关于“按钮”,如果您要禁用文本框,那么您需要搜索 acTextBox

以上是关于禁用控件后在 Access VBA 中显示禁用的控件的主要内容,如果未能解决你的问题,请参考以下文章

如何在ms-access vba中单击命令按钮单击以更改代码以更改控件属性

VBA访问条件格式重置新记录

MS Access - 右键单击​​对象已禁用

使用 VBA 禁用 Outlook 安全设置

根据文本控件值标记和启用/禁用连续表单上的按钮

vba代码如何禁用表单的设计视图并仍然正确显示表单的内容?