2014-05-19 42 views
1

我有单元格A1,单元格B1和单元格C1,我需要检查用户或VBA是否在A1中更改了值。蒙山出如果Target.Address A1 statment让人无限循环Excel VBA Target.address worksheet.onchange无限循环

Private Sub Worksheet_Change(ByVal Target As range) 

If Target.Address = B1 or Target.Address = C1 Then 
    If IsEmpty(Cell("B1")) then 
     Cell("A1").value = "Enter value" 
      If IsEmpty(Cell("C1")) then 
       Cell("A1").value = "" 
      Else 
       Cell("A1").value = "=C1/B1" 
      End IF 
    End IF 
End IF 


If Target.Address = A1 
    IF "changed by user typing" Then 
     Cell("B1").value = "" 
     Cell("C1").value = "" 
    Else 
    End IF 
End IF 
End Sub 

如何确定什么样的目标已被用户不能从VBA改变?

回答

3

我怀疑你想是这样的:

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Target, Range("A1")) Is Nothing Then 
     Application.EnableEvents = False 
     Range("B1:C1").Value = "" 
     Application.EnableEvents = True 
    ElseIf Not Intersect(Target, Range("B1:C1")) Is Nothing Then 
     Application.EnableEvents = False 
     If IsEmpty(Range("B1")) Then 
      Range("A1").Value = "Enter value" 
     ElseIf IsEmpty(Range("C1")) Then 
      Range("A1").Value = "" 
     Else 
      Range("A1").Value = "=C1/B1" 
     End If 
     Application.EnableEvents = True 
    End If 

End Sub 
+0

是的,但我需要做的,只有当改变指定单元格使得如果'Target.Address = B1或Target.Address = C1 Then' '如果Target.Address = A1然后' – user3588043

+0

这没有任何意义 - 目标地址不能同时存在。我发布的代码将清除B1:C1,如果用户更改A1或者如果用户更改B1或C1,请遵循原始逻辑。请测试它,然后_告诉我它是否不做你所需要的。 – Rory

+0

范围错误(“B1:C1”)。Value =“” 对象的方法值范围失败 – user3588043