2017-03-09 151 views
0

是否有一种简单的方法让Excel在单元格更改时自动执行宏?Excel VBA在单元格从yes更改为no时自动运行宏

Sub Change() 
If Range("E94").Value = "no" Then 
    Rows("95:118").EntireRow.Hidden = True 
ElseIf Range("E94").Value = "yes" Then 
    Rows("95:118").EntireRow.Hidden = False 
End If 
End Sub 

如果有人改变了细胞E94从“无”(标准)为“是”应该“弹出”细胞免受值“95 - 118”。 如果我从“是”改回“否”,它们应该消失。

回答

1

使用Worksheet_Change事件:

Private Sub Worksheet_Change(ByVal Target As Range) 
'Call your Sub here 
End Sub 

或者,您可以使用事件的对象范围:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address(False,False) = "E94" Then 
    If Target.Value = "no" Then 
     Rows("95:118").EntireRow.Hidden = True 
    ElseIf Target.Value = "yes" Then 
     Rows("95:118").EntireRow.Hidden = False 
    End If 
End If 
End Sub 
+0

你的代码会隐藏/取消隐藏仅列94,和OP要隐藏/取消隐藏行(“95:118”) –

+0

@ShaiRado起坐,不是看他的代码正常。编辑 – gizlmo

2

可以使用Worksheet_Change事件,您希望这个代码中的相关表跑步。

在你的情况,如果你想只有当细胞“E94”变更运行此代码,那么你需要检查,如果某些细胞发生变化,你行做到这一点:

If Not Intersect(Target, Range("E94")) Is Nothing Then 

代码

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("E94")) Is Nothing Then 
    If Target.Value = "no" Then 
     Rows("95:118").EntireRow.Hidden = True 
    ElseIf Target.Value = "yes" Then 
     Rows("95:118").EntireRow.Hidden = False 
    End If 
End If 

End Sub 
+0

是的,这正是我所寻找的。非常感谢。你节省了我的时间。对此,我真的非常感激。 – kyuubi

相关问题