我有一个带有TextBox_Click代码的ActiveX TextBox,这样我输入的每个字符都会触发另一个要执行的子,然后通过更新一个命名的单元来更新表,该单元作为驱动表的公式。然后我有一个ListBox,其ListFillRange链接到该表。结果是我在TextBox中键入的每个字符都会导致ListBox更新。这很好。
我放置的下一件事是ListBox_Click代码,这样当我点击ListBox中的一个项目时,它会更新Label.Caption然后设置ListBox.Value =""。这也很好。
我想要的是在分配Label.Caption后清除TextBox。问题是TextBox clear会导致ListBox更新,然后Label会得到错误的值。这看起来很奇怪,因为命令在设置TextBox =""之前指定了标题。这会重置ListBox。但是,首先发生标题分配似乎并不重要。 ListBox似乎仍然被选中,因此TextBox的更新更新了ListBox,因此Label获取了错误的值。
非常感谢任何想法。
这是在Sheet的模块中
Private Sub TextBox5_Change()
Call UpdateValues(TextBox5.Value)
End Sub
这是一般模块
Sub UpdateValues(SearchString As String)
Range("mySearchString").Value = SearchString
Range("myStartPosition").Value = Range("myOverwriteProtection").Value
End Sub
这是在Sheet的模块中
Private Sub ListBox1_Click()
ActiveSheet.OLEObjects("Label33").Object.Caption = ActiveSheet.OLEObjects("ListBox1").Object.Value
ActiveSheet.OLEObjects("ListBox1").Object.Value = ""
ActiveSheet.OLEObjects("TextBox5").Object.Text = ""
End Sub
答案 0 :(得分:0)
真的有两种选择。
不要使用ListFillRange。除非您需要列标题,否则无需使用此属性 - 您已经在使用代码,因此您可以使用以下代码在代码中重新填充列表:
control_name.List = Sheets("Sheet name").Range("some range").Value
使用布尔标志来停止事件。作为每个事件的第一行,使用:
If flag_variable then exit sub
然后,只要您需要执行某些操作并且不想运行控制事件,只需将变量设置为True,执行操作然后将其设置为False即可。 (它有点像使用Application.EnableEvents
,它不适用于ActiveX控件事件)