数据更新后重新运行Excel宏

时间:2017-08-10 15:36:15

标签: excel vba excel-vba

我正在尝试创建一个宏,如果特定列中的单元格包含0值,则该宏会隐藏行。

我发现了另一个使用的论坛中的宏会隐藏行(下面),但它只会在第一次刷新数据时隐藏行。我在工作表顶部使用数据验证单元格,从另一个工作表中提取数据以填充参考数据(并且工作表的其余部分使用SUMIFS)。

当我的团队更新单元格以选择各种选项(例如:美国,亚洲,欧洲,全部)时,我需要再次运行宏来隐藏任何包含0值的单元格。我也不能有一个会破坏工作表中使用的SUMIFS公式的宏。

目前的公式我有:

Sub HideRows()
Application.ScreenUpdating = False
Application.Calculation = xlManual

For Each c In Range("E7:E153")
    If c.Value = 0 Then Rows(c.Row).Hidden = True
Next

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub

我认为我需要的是在最后添加某种重新运行或循环线但不知道从哪里开始。任何帮助将不胜感激。

TYVM。

2 个答案:

答案 0 :(得分:1)

您可以使用Worksheet_Change事件。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        Application.ScreenUpdating = False
        Application.Calculation = xlManual

        For Each c In Range("E7:E153")
            If c.Value = 0 Then Rows(c.Row).Hidden = True Else Rows(c.Row).Hidden = False
        Next

        Application.Calculation = xlAutomatic
        Application.ScreenUpdating = True
    End If
End Sub

答案 1 :(得分:0)

Private Sub Worksheet_Change(ByVal Target As Range)

    MsgBox "You just changed " & Target.Address

End Sub

借鉴 http://www.ozgrid.com/VBA/run-macros-change.htm

将target.Address引用到chages的特定单元格,然后调用HideRows

如果您需要先取消隐藏所有行,只需将此代码添加到您的程序中ActiveSheet.Cells.EntireRow.Hidden = False