Excel 如何根据最新的单元格值重新运行宏

Excel 如何根据最新的单元格值重新运行宏,excel,vba,userform,Excel,Vba,Userform,我有这些宏集,这些宏会根据单元格值的变化强制行隐藏和取消隐藏,它可以按预期运行,但由于宏的顺序,行可能会不经意地被隐藏/取消隐藏。是否有方法根据目标单元格中的最新值重新运行所有宏?在这里,我不必返回到每个单元格来触发值以运行宏。我在网上搜索并尝试我认为可能的解决方案,但就是无法让它发挥作用。我真的非常感谢任何帮助或建议! 我的宏当前宏如下所示: Private Sub Worksheet_Change(ByVal Target As Range) ActiveSheet.Activate

我有这些宏集,这些宏会根据单元格值的变化强制行隐藏和取消隐藏,它可以按预期运行,但由于宏的顺序,行可能会不经意地被隐藏/取消隐藏。是否有方法根据目标单元格中的最新值重新运行所有宏?在这里,我不必返回到每个单元格来触发值以运行宏。我在网上搜索并尝试我认为可能的解决方案,但就是无法让它发挥作用。我真的非常感谢任何帮助或建议! 我的宏当前宏如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Activate
        If Not Application.Intersect(Range("C8"), Range(Target.Address)) Is Nothing Then
        Select Case Target.Value
        Case Is = "A": Rows("54").EntireRow.Hidden = True
                       Rows("61").EntireRow.Hidden = True
                       Rows("77").EntireRow.Hidden = True
                       Rows("93").EntireRow.Hidden = True
                       Rows("109").EntireRow.Hidden = True
                       Rows("129").EntireRow.Hidden = True
        Case Is = "B": Rows("54").EntireRow.Hidden = False
                       Rows("61").EntireRow.Hidden = False
                       Rows("77").EntireRow.Hidden = False
                       Rows("93").EntireRow.Hidden = False
                       Rows("109").EntireRow.Hidden = False
                       Rows("129").EntireRow.Hidden = False
        Case Is = "C": Rows("54").EntireRow.Hidden = True
                       Rows("61").EntireRow.Hidden = True
                       Rows("77").EntireRow.Hidden = True
                       Rows("93").EntireRow.Hidden = True
                       Rows("109").EntireRow.Hidden = True
                       Rows("129").EntireRow.Hidden = True
        End Select
End If
        If Not Application.Intersect(Range("C8"), Range(Target.Address)) Is Nothing Then
        Select Case Target.Value
        Case Is = "B": Sheets("Proforma Inv").Visible = True
        Case Else
                       Sheets("Proforma Inv").Visible = False
        End Select
End If
        If Not Application.Intersect(Range("C9"), Range(Target.Address)) Is Nothing Then
        Select Case Target.Value
        Case Is = "Debug", "Soshi": Rows("55").EntireRow.Hidden = False
                       Sheets("Inv").Rows("41").EntireRow.Hidden = True
                       Sheets("Inv").Rows("48").EntireRow.Hidden = True
                       Sheets("Inv").Rows("55").EntireRow.Hidden = True
                       Sheets("Inv").Rows("62").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("39").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("46").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("53").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("60").EntireRow.Hidden = True

        Case Else
                       Rows("55").EntireRow.Hidden = True
                       Sheets("Inv").Rows("41").EntireRow.Hidden = False
                       Sheets("Inv").Rows("48").EntireRow.Hidden = False
                       Sheets("Inv").Rows("55").EntireRow.Hidden = False
                       Sheets("Inv").Rows("62").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("39").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("46").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("53").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("60").EntireRow.Hidden = False
        End Select
End If
        If Not Application.Intersect(Range("C52"), Range(Target.Address)) Is Nothing Then
        Select Case Target.Value
        Case Is = "1": Rows("72:119").EntireRow.Hidden = True
                       Rows("57:60").EntireRow.Hidden = False
                       Rows("62:71").EntireRow.Hidden = False
                       Sheets("Inv").Rows("44:64").EntireRow.Hidden = True
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:43").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = True
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = True
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("42:62").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:41").EntireRow.Hidden = False
        Case Is = "2": Rows("88:119").EntireRow.Hidden = True
                       Rows("57:60").EntireRow.Hidden = False
                       Rows("62:76").EntireRow.Hidden = False
                       Rows("78:87").EntireRow.Hidden = False
                       Sheets("Inv").Rows("51:64").EntireRow.Hidden = True
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:47").EntireRow.Hidden = False
                       Sheets("Inv").Rows("49:50").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = False
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = True
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("49:62").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:45").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("47:48").EntireRow.Hidden = False
        Case Is = "3": Rows("104:119").EntireRow.Hidden = True
                       Rows("57:60").EntireRow.Hidden = False
                       Rows("62:76").EntireRow.Hidden = False
                       Rows("78:92").EntireRow.Hidden = False
                       Rows("94:103").EntireRow.Hidden = False
                       Sheets("Inv").Rows("58:64").EntireRow.Hidden = True
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:47").EntireRow.Hidden = False
                       Sheets("Inv").Rows("49:54").EntireRow.Hidden = False
                       Sheets("Inv").Rows("56:57").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = False
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = False
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("56:62").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:45").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("47:52").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("54:55").EntireRow.Hidden = False
        Case Is = "4": Rows("57:60").EntireRow.Hidden = False
                       Rows("62:76").EntireRow.Hidden = False
                       Rows("78:92").EntireRow.Hidden = False
                       Rows("94:108").EntireRow.Hidden = False
                       Rows("110:119").EntireRow.Hidden = False
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:47").EntireRow.Hidden = False
                       Sheets("Inv").Rows("49:54").EntireRow.Hidden = False
                       Sheets("Inv").Rows("56:61").EntireRow.Hidden = False
                       Sheets("Inv").Rows("63:64").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = False
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = False
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:45").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("47:52").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("54:59").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("61:62").EntireRow.Hidden = False
        End Select
End If
End Sub

通常最好将大部分代码移动到单独的子代码中,并从事件处理程序调用该子代码:然后也可以从其他地方调用它

常规模块:

Sheet1.SyncVis
图纸模块:

Private Sub Worksheet_Change(ByVal Target As Range)
     CheckVis Target
End Sub

Sub SyncVis()
    Me.CheckVis Range("C8")
    Me.CheckVis Range("C52")
End Sub


Private Sub CheckVis(ByVal Target As Range)
    Dim tf As Boolean
    If Not Application.Intersect(Range("C8"), Target) Is Nothing Then
        With Range("A54,A61,A77,A93,A109,A129").EntireRow
            Select Case Target.Value
                Case "A", "C": .Hidden = True
                Case "B": .Hidden = False
            End Select
        End With
        Sheets("Proforma Inv").Visible = Target.Value = "B"
    End If

    If Not Application.Intersect(Range("C9"), Target) Is Nothing Then
        tf = Target.Value = "Debug" or Target.Value = "Soshi" 
        Rows("55").EntireRow.Hidden = tf
        Sheets("Inv").Range("A41,A48,A55,A62").EntireRow.Hidden = tf
        Sheets("Proforma Inv").Range("A39,A46,A53,A60").EntireRow.Hidden = tf 
    End If

    If Not Application.Intersect(Range("C52"), Range(Target.Address)) Is Nothing Then
        Select Case Target.Value
        Case Is = "1": Range("A72:A119,A57:A60,A62:A71").EntireRow.Hidden = True
                       Sheets("Inv").Rows("44:64").EntireRow.Hidden = True
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:43").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = True
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = True
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("42:62").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:41").EntireRow.Hidden = False
        Case Is = "2": Rows("88:119").EntireRow.Hidden = True
                       Rows("57:60").EntireRow.Hidden = False
                       Rows("62:76").EntireRow.Hidden = False
                       Rows("78:87").EntireRow.Hidden = False
                       Sheets("Inv").Rows("51:64").EntireRow.Hidden = True
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:47").EntireRow.Hidden = False
                       Sheets("Inv").Rows("49:50").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = False
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = True
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("49:62").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:45").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("47:48").EntireRow.Hidden = False
        Case Is = "3": Rows("104:119").EntireRow.Hidden = True
                       Rows("57:60").EntireRow.Hidden = False
                       Rows("62:76").EntireRow.Hidden = False
                       Rows("78:92").EntireRow.Hidden = False
                       Rows("94:103").EntireRow.Hidden = False
                       Sheets("Inv").Rows("58:64").EntireRow.Hidden = True
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:47").EntireRow.Hidden = False
                       Sheets("Inv").Rows("49:54").EntireRow.Hidden = False
                       Sheets("Inv").Rows("56:57").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = False
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = False
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("56:62").EntireRow.Hidden = True
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:45").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("47:52").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("54:55").EntireRow.Hidden = False
        Case Is = "4": Rows("57:60").EntireRow.Hidden = False
                       Rows("62:76").EntireRow.Hidden = False
                       Rows("78:92").EntireRow.Hidden = False
                       Rows("94:108").EntireRow.Hidden = False
                       Rows("110:119").EntireRow.Hidden = False
                       Sheets("Inv").Rows("38:40").EntireRow.Hidden = False
                       Sheets("Inv").Rows("42:47").EntireRow.Hidden = False
                       Sheets("Inv").Rows("49:54").EntireRow.Hidden = False
                       Sheets("Inv").Rows("56:61").EntireRow.Hidden = False
                       Sheets("Inv").Rows("63:64").EntireRow.Hidden = False
                       Sheets("PL").Rows("22:23").EntireRow.Hidden = False
                       Sheets("PL").Rows("39:40").EntireRow.Hidden = False
                       Sheets("PL").Rows("56:57").EntireRow.Hidden = False
                       Sheets("PL").Rows("73:74").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("36:38").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("40:45").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("47:52").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("54:59").EntireRow.Hidden = False
                       Sheets("Proforma Inv").Rows("61:62").EntireRow.Hidden = False
        End Select
End If
End Sub
旁注:
范围(Target.Address)
是多余的:只是
目标