gpt4 book ai didi

Excel:组合框和复选框干扰?

转载 作者:行者123 更新时间:2023-12-02 09:44:59 25 4
gpt4 key购买 nike

我正在使用一些 activeX 控件制作 Excel 表单,但在合并以下功能时遇到问题:

enter image description here

我希望用户在 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

所以,如果我在组合框11中选择0,结果是:

enter image description here

到目前为止一切顺利。但是,如果我在组合框 11 中选择大于 0 的值(例如 1),然后尝试通过单击 checkbox1 来展开表格,则表格会展开,但会收到一条错误消息:

Run-time error '1004': Not possible to set properties: enabled class: OLEObject

(不确定确切的错误文本,因为我没有使用英文 MSOffice)

按下“调试”按钮时,Sub ComboBox11_Change() 中的以下行会亮起:

Me.ComboBox9.Enabled = True

奇怪的是,当组合框11留空(未选择值)时,不会出现此错误。

我不知道为什么该复选框会与其他组合框交互。我很困惑,非常感谢任何帮助。

最佳答案

要重现此内容:

有一个像这样的表: enter image description here

A1:A6 是 ComboBox 的 ListFillRange。

然后在 CheckBox1_Change() 中使用 VBA 代码隐藏 1:6 之间的任何行将引发错误。

Private Sub CheckBox1_Change()
If CheckBox1.Value = False Then Me.Rows("7:13").Hidden = True
If CheckBox1.Value = True Then Me.Rows("7:13").Hidden = False
'If CheckBox1.Value = False Then Me.Rows("6:13").Hidden = True 'ERROR
'If CheckBox1.Value = True Then Me.Rows("6:13").Hidden = False 'ERROR
End Sub

Private Sub ComboBox1_Change()
If Me.ComboBox1.Value = 0 Then
If Me.CheckBox1.Value = True Then Me.CheckBox1.Value = False
Me.CheckBox1.Enabled = False
Else
Me.CheckBox1.Enabled = True
End If
End Sub

如果我们创建一个名为“list”的名称,它与整个列相关,如下所示: enter image description here并使用此“列表”作为 ComboBox 的 ListFillRange,那么如果此表中的行对代码隐藏,则会发生错误。这与隐藏行是否位于真正的事件“列表”行 1-6 内无关。

如果我们不在名称中引用整个列,而是仅引用第 1-10 行,例如:

=INDEX(Sheet1!$A$1:$A$10;1):INDEX(Sheet1!$A$1:$A$10;6)

那么仅当代码隐藏从 1 到 10 的行时才会发生错误,但如果代码隐藏从 11 向上的行,则不会发生错误。

编辑:

继续我的示例:将数字从 Sheet1!A:A 移动到 Sheet2!A:A 并创建与相关的命名范围“列表”

=Sheet2!$A$1:INDEX(Sheet2!$A$1:$A$40;COUNTIF(Sheet2!$A$1:$A$40;"<>"))

然后,如果 Sheet1.ComboBox1.ListFillRange 位于 Sheet2 类模块内,则以下代码将起作用:

Private Sub Worksheet_Change(ByVal Target As Range)
ThisWorkbook.Worksheets(1).ComboBox1.ListFillRange = "list"
End Sub

如果在 Sheet1 类模块中尝试设置 ListFillRange,将会产生错误。

关于Excel:组合框和复选框干扰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27126931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com