【问题标题】:Enable Button If all the checkboxes are ticked启用按钮 如果所有复选框都被勾选
【发布时间】:2020-09-14 00:43:08
【问题描述】:

我有一个已分配给名为“运行报告”的按钮的 vba 代码。有一些带有复选框的说明,我要做的是只有在所有复选框都被勾选时才启用按钮。我尝试了类似下面的方法,但不知何故它不起作用。声明似乎有问题。我使用的是 ms office 2013 版本。

Sub buttonenable()
Dim B1 as Button
Dim C1 as Checkbox
Dim C2 as Checkbox
Dim C3 as Checkbox
Set B1 = Thisworkbook.Sheets("Home").Button("Run report")
Set C1 = Thisworkbook.Sheets("Home").Checkbox("Checkbox1")

Set C2 = Thisworkbook.Sheets("Home").Checkbox("Checkbox2")

Set C3 = Thisworkbook.Sheets("Home").Checkbox("Checkbox3")

IF C1 = True and C2 = True and C3 = True Then
B1.Enable = True

Else
B1.enable = False

End If

End Sub()

【问题讨论】:

  • 请在代码顶部使用“选项显式”。更好的是勾选工具>选项>编辑器中的所有框。这将显示您的声明和一些代码中的错误,例如 Button、Checkbox 的大写以及 thisworkbook 的拼写错误。如果您以小写形式键入它并且它更正为大写,则 vba 已“识别”它。
  • 我不在电脑前我可以试试这个,但我相信“启用”是您所追求的按钮属性。进入“设计模式”,右键单击按钮,然后单击“属性”以检查它并查看其他属性(另外,确保那里的“名称”与代码中的按钮名称匹配。)我可以看到它不是在您的代码末尾“识别”。
  • 此外,按钮和复选框并不像您的代码中那么简单......从内存中它们是形状或表单,具体取决于它们是 ActiveX 还是表单控件。
  • @Stax 就在上面。 YourControl.Enabled 是正确的语法,它是对属性的不同访问,具体取决于它们是表单控件还是 ActiveX。

标签: excel vba button checkbox


【解决方案1】:
Sub ButtonEnable()
   Dim ws As Worksheet

   Set ws = Worksheets("Sheet1")

   If ws.OLEObjects("chkbox1").Object.Value And _
      ws.OLEObjects("chkbox2").Object.Value Then
      ws.OLEObjects("CommandButton1").Object.Enabled = True
   Else
      ws.OLEObjects("CommandButton1").Object.Enabled = False
   End If

   Set ws = Nothing
End Sub

您还必须为每个指向此 ButtonEnable 的复选框设置一个单击事件。 例如:

Private Sub chkbox1_Click()
   ButtonEnable
End Sub

Private Sub chkbox2_Click()
   ButtonEnable
End Sub

我假设您正在使用 ActiveX 控件。

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 2020-02-23
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2014-01-08
    • 2015-12-09
    • 2014-02-19
    相关资源
    最近更新 更多