首先,正如您可能从下面看到的那样,我的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
我在运行宏时遇到错误,我认为这是因为它创建了一个循环 - 我更改了G69的值,因此它改变了G68的值,从而触发了该单元格改变的if例程因此它试图将G69设置为一个值,依此类推......
任何人都可以解释我做错了什么吗?我怀疑它很容易解决并且与我笨拙的编码有关! :)
希望有道理!非常感谢..
Pat
答案 0 :(得分:7)
如果您不希望对VBA中的单元格进行更改以触发事件,则可以在更改之前禁用事件,并在更改之后重新启用事件。
Application.EnableEvents = False
' code here will not trigger events.
Application.EnableEvents = True
答案 1 :(得分:1)
非常感谢你的帮助。代码现在看起来如下,似乎工作,不知道我是否得到错误检查正确!? :)
再次感谢.....Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$69" Then
On Error GoTo Lastline
Application.EnableEvents = False
If Range("$G$69").Value > 0 Then
Range("$g$68").Value = "Hosted"
Else: Range("$g$68").Value = "None"
End If
Application.EnableEvents = True
End If
If Target.Address = "$G$68" Then
Application.EnableEvents = False
If Range("$G$68").Value = "None" Then
Range("$g$69").Value = 0
End If
Application.EnableEvents = True
End If
Lastline:
Application.EnableEvents = True
End Sub
答案 2 :(得分:0)
只有在满足所有条件时才能更改。试试这个:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$G$69" ' Quantity
' Zero Quantity but Item is not None
If Target.Value = 0 And Range("$G$68").Value <> "None" Then
Range("$G$68").Value = "None"
End If
' Non-zero Quantity but Item is None
If Target.Value <> 0 And Range("$G$68").Value = "None" Then
Range("$G$68").Value = "Eggs"
End If
Case "$G$68" ' Item Name
' Item is None but Quantity is not zero
If Target.Value = "None" And Range("$G$69").Value <> 0 Then
Range("$G$69").Value = 0
End If
End Select
End Sub
但如果G69 / G68包含公式且相关范围发生变化,则此检查无效。