- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ComboBox 的代码,其目的是在选择 ComboBox 的值后写入 ComboBox 的值,然后重置 ComboBox。代码如下:
Private Sub ComboBox1_Click()
Dim valor As String
Dim celda As Range
Set celda = ActiveCell
valor = ComboBox1.Value
ComboBox1.ListIndex = "-1"
celda = valor
celda.Offset(1, 0).Select
End Sub
看起来语句 ComboBox1.ListIndex = "-1"一遍又一遍地触发 Sub ComboBox1_Click() 。这种情况只发生几次。有什么解决办法吗?
最佳答案
这个问题有很多可能的解决方案。我建议两种解决方案,一种可以轻松解决这种特定情况,另一种是“通用”的,以避免在任何子例程中重新进入。
解决方案 1。
此解决方案特定于您的情况。在继续之前,您可以简单地在子代码的第一行检查 ListIndex
属性:
If ComboBox1.ListIndex = -1 Then Exit Sub
该例程将被输入两次,但在第二次出现时它将立即退出,没有任何效果。
解决方案 2。
这是避免重新进入任何例程的通用解决方案。您可以为例程定义一个状态变量,它是一个静态 bool 变量,指示例程是否已经在调用堆栈中,在这种情况下您不必重新定义-输入它。
Private Sub NoReEnter()
Static isActive as Boolean ' <-- indicates that this routine is already in the call stack
If isActive then Exit Sub
isActive = True
On Error Goto Cleanup
''''''''''''''''''''''''''''''''''''''''''''''''''''
' .... ' Body of the routine
''''''''''''''''''''''''''''''''''''''''''''''''''''
Cleanup: ' make sure to reset the state variable before exiting
isActive = False
End Sub
解决方案 2 可应用于您想要使其成为非递归的任何例程。将此解决方案转换为您的代码,而不干扰其他潜在(偏离主题)的问题,得到以下结果:
Private Sub ComboBox1_Click()
Static isActive As Boolean
If isActive then Exit Sub
isActive = True
On Error Goto Cleanup
' You routine's code as is
''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim valor As String
Dim celda As Range
Set celda = ActiveCell
valor = ComboBox1.Value
ComboBox1.ListIndex = -1
celda = valor
celda.Offset(1, 0).Select
''''''''''''''''''''''''''''''''''''''''''''''''''''
Cleanup:
isActive = False
End Sub
关于vba - 私有(private)子 ComboBox1_Click() 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986758/
我在电子表格中添加了一个矩形。我现在希望在事件 RectangleA_Click() 上使用宏。我知道形状的名称是 RectangleA,因为我有以下子: Sub f() Dim Shape As S
这个问题已经有答案了: Are ActiveX Controls Disabled? (11 个回答) 已关闭 8 年前。 我的工作表中有几个命令按钮,单击时会激活它们的单击事件 (_Click)。这
我是一名优秀的程序员,十分优秀!