我认为我遇到了其他错误,甚至可能因此崩溃而崩溃,但是现在所发生的一切都是随着工作簿中任何单元格的更改而触发的combobox_change()事件。
我不确定这是否真的是一个错误,或者是否有修复或解决方法。如果是错误,我该如何向Excel人员报告?
最后,我问题的真正含义是“我如何最好地解决这个问题?”我想有一些基于公式的命名范围,但似乎这样就不可能了。
要重现此错误,请执行以下操作:
同样,这是正常的,我正在做什么的最佳选择是什么?此组合框链接到各种单元格,并且应该是默认情况下excel提供的数据验证下拉列表中的小字体的替代。
答案 0 :(得分:3)
我的建议是永远不要使用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
答案 1 :(得分:0)
到目前为止,我有几个可用的选项。我能想出的最好的是:
避免直接使用基于公式的命名范围。相反,定义一个子程序,该子程序将检查定义的范围“demoRange”是否应该从其当前值更改。在workbook_open和sheet3_deactivate事件上运行此子例程。如果需要,提示用户询问是否可以更新指定范围。 [edit]更新“demoRange”的宏可能只是从“demoRange_FormulaBased”命名范围复制到“demoRange”,这将是静态的。 [/编辑]
此解决方案效果很好,因为您可以继续使用linkedcell属性,您不必使用VBA来填充组合框,并且命名范围仍可用于其已有的任何其他目的。避免使用onchange事件来运行这个新的子例程,因为如果用户打开“查找/替换”对话框并选择“全部替换”,它可能会被触发数千次。