当 Excel 中的 ActiveX 组合框对象的 ListFillRange 引用基于公式的命名范围(定义的名称)时,它们的行为不佳。
我认为我遇到了其他错误,甚至可能因此导致 Excel 崩溃,但现在发生的只是只要工作簿中的任何单元格发生更改,就会触发组合框_change() 事件。
我不确定这是否真的是一个错误,或者是否有修复或解决方法。如果是错误,我如何向 Excel 人员报告?
最后,我的问题的真正核心是“我如何最好地解决这个问题?”我想要一些基于公式的命名范围,但它seems这样是不可能的。
要重现此错误,请执行以下操作:
- 创建一个新工作簿。在 Sheet3 上,创建一个 3 列宽、几行高的小表格。
- 使用以下公式(或等效公式)创建命名范围:=OFFSET(Sheet3!$A$2:$C$36,0,0,COUNTA(Sheet3!$A:$A),COUNTA(Sheet3!$4:$4))为此,请使用“输入”>“名称”>“定义”。将范围命名为“demoRange”
- 转到 Sheet1 并创建一个组合框,(它必须在单独的表格上)。 (使用控制工具箱菜单,not表单菜单)。
- 单击“设计模式”按钮(带铅笔的蓝色三角形),然后右键单击组合框并转到“属性”。
- 在组合框的属性窗口中,更改 ListFillRange 属性,使其指向您在步骤 2 中创建的命名范围(“demoRange”)。
- 您可能需要将 ColumnCount 属性更改为 3,并将 ColumnWidths 属性更改为“50,50,50”
- 通过在 linkedCell 属性中键入 A1,将 linkedCell 属性设置为单元格“A1”。
- 关闭属性窗口,然后双击组合框以定义其change() 事件。
- 在新组合框的更改事件的子例程中放置 Debug.Assert(false) 或 Msgbox("demo") 行。
- 退出设计模式
-
重要的- 现在在组合框中选择一个项目。该事件第一次应该正常触发。 (如果不执行此步骤,该错误将不会显示 - 必须在组合框中选择某些内容)
- 在工作簿 [编辑] 或任何其他打开的工作簿 [/edit] 中的任何工作表和任何位置编辑单元格。每次编辑任何单元格时(至少对我来说),组合框的 onchange 事件都会运行。
再说一遍,这是正常的吗?对于我正在做的事情来说,最好的选择是什么?该组合框链接到各种单元格,并且应该替代 excel 默认提供的数据验证下拉列表中的小字体。
我的建议是永远不要使用 ListFillRange 和 LinkedCell。他们只是麻烦。用 List 填充列表框并使用 Change 事件写入单元格。在某个地方,也许是 Workbook_Open 事件,填充列表框
Private Sub Workbook_Open()
Sheet2.ListBox1.Clear
Sheet2.ListBox1.List = Sheet1.Range("demoRange").Value
End Sub
然后在 Sheet2 模块的更改事件中,检查是否单击了某些内容并将其写入单元格
Private Sub ListBox1_Change()
If Me.ListBox1.ListIndex >= 0 Then
Sheet2.Range("A1").Value = Me.ListBox1.Value
End If
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)