worksheet_change函数导致循环

0 excel vba excel-vba

首先,正如您可能从下面看到的那样,我的VBA技能非常有限!

我正在创建一个电子表格,我试图包括一些健全性检查.基本上,如果单元格G69大于零则表示已经购买了一个项目,因此单元格G68(定义已购买的项目类型)不能等于none,它必须是一个值(我强制它是'蛋').如果G69不大于零则没有买任何东西,所以G68应该被迫'无'.

同样,如果单元格G68设置为"无",则不会购买任何内容,因此G69应强制为零.

我拼凑的代码如下:


Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$G$69" Then

 If Range("$G$69").Value > 0 Then

   Range("$g$68").Value = "Eggs"

 Else: Range("$g$68").Value = "None"

End If

End If

If Target.Address = "$G$68" Then

 If Range("$G$68").Value = "None" Then

  Range("$g$69").Value = 0

 End If

End If

End Sub
Run Code Online (Sandbox Code Playgroud)

我在运行宏时一直遇到错误,我认为这是因为它创建了一个循环 - 我改变了G69的值,结果它改变了G68的值,这反过来触发了该单元格的if例程,因此它尝试将G69设置为值,依此类推......

谁能解释我做错了什么?我怀疑它很容易解决并且与我笨拙的编码有关!:)

希望有道理!非常感谢..

小智 7

如果您不希望对VBA中的单元格进行更改以触发事件,则可以在更改之前禁用事件,并在更改之后重新启用事件.

Application.EnableEvents = False

' code here will not trigger events.

Application.EnableEvents = True
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的建议.您可能想要添加一个错误处理程序:`On Error GoTo lastLine`,然后将`lastLine:`标签放在`Application.EnableEvents = True`语句之前.否则,错误将导致事件保持关闭状态. (4认同)