【发布时间】:2015-01-23 11:15:56
【问题描述】:
我正在制作一个带有一些 activeX 控件的 Excel 表单,但在整合以下功能时遇到了问题:
我希望用户在 ComboBox11 中选择一个数字。如果数字为 0,则表单会发生变化,组合框 9 和 10 将被禁用(使用 VBA 代码),下表“淡出”(使用条件格式),通知用户不要填写。
另一方面,如果用户选择大于 0 的数字,则表单保持原样。表格下方是一个复选框(checkbox1),用于在需要放入表格的数据大于表格大小时展开表格(取消隐藏之前隐藏的行)。
组合框 11 后面的 VBA 代码是:
Private Sub ComboBox11_change()
Dim ws As Worksheet
Set ws = Sheets("Form")
If Not Me.ComboBox11.Text = "" Then ws.Range("J24") = CInt(Me.ComboBox11.Text) 'to write integer instead of text into linked cell
If Me.ComboBox11.Value = 0 Then
Me.ComboBox9.Enabled = False
Me.ComboBox10.Enabled = False
If Me.CheckBox1.Value = True Then Me.CheckBox1.Value = False 'if combobox11 is 0 than the table doesn't need to be expanded
Me.CheckBox1.Enabled = False
Else
Me.ComboBox9.Enabled = True
Me.ComboBox10.Enabled = True
Me.CheckBox1.Enabled = True
End If
End Sub
CheckBox1 后面的代码是:
Private Sub CheckBox1_Change()
Dim ws As Worksheet
Set ws = Sheets("Form")
If CheckBox1.Value = False Then ws.Rows("46:71").Hidden = True
If CheckBox1.Value = True Then ws.Rows("46:71").Hidden = False
End Sub
所以,如果我在 combobox11 中选择 0,结果是:
到目前为止一切顺利。但是如果我选择大于 0 的值,比如在 combobox11 中选择 1,然后尝试通过单击复选框 1 来展开表格,表格就会展开,但我收到一条错误消息:
运行时错误“1004”:无法设置属性:启用类: OLE 对象
(不确定确切的错误文本,因为我没有使用英文 MSOffice)
按下调试按钮时,Sub ComboBox11_Change() 中的以下行会亮起:
Me.ComboBox9.Enabled = True
奇怪的是,当 combobox11 留空(未选择值)时,不会出现此错误。
我不知道为什么复选框会与其他组合框交互。我很困惑,任何帮助将不胜感激。
【问题讨论】:
-
您是否尝试过在“CheckBox1_Change”的开头使用 Application.EnableEvents = False 并在其中使用 Application.EnableEvents = True ?
-
ComboBox11的ListFillRange是什么或者ComboBox11的List是怎么定义的?隐藏 CheckBox1_Change 中的行是否可能对 ComboBox11 的列表产生影响?如果是,为什么?
-
@dee:谢谢你的建议。刚试了一下,出现同样的错误
-
@AxelRichter:combobox11 的列表字段是一个自动生成的整数列表,从 0 到用户从另一个组合框中选择的值(不大于 40 btw)。选择最上面的数字后,在同一张表(有填写表格的表)的列中生成列表。然后,此列用于在 Excel 名称管理器中创建一个列表,该列表提供组合框。复选框代码不会隐藏生成该列表的单元格。即使他们愿意,这怎么可能是个问题?
-
嗯,似乎您已经非常确定这永远不会成为问题。我的回答表明它可能是。您是否尝试过重现我的答案?因此,如果您需要进一步的帮助,您应该更详细地展示如何为您的 ComboBox11 生成列表。
标签: excel vba checkbox combobox