- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一些 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
所以,如果我在组合框11中选择0,结果是:
到目前为止一切顺利。但是,如果我在组合框 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留空(未选择值)时,不会出现此错误。
我不知道为什么该复选框会与其他组合框交互。我很困惑,非常感谢任何帮助。
最佳答案
要重现此内容:
有一个像这样的表:
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”的名称,它与整个列相关,如下所示: 并使用此“列表”作为 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/
我是一名优秀的程序员,十分优秀!