Excel VBA:指定给数据验证菜单的宏

Excel VBA:指定给数据验证菜单的宏,vba,excel,Vba,Excel,好的,我的情况如下: 我的工作簿中有两个数据透视图,图表a和图表B(在单独的表格上…它们是大图表)。每个图表下都有一个数据验证下拉菜单,其中列出了年份(2010-2020)。在菜单中选择年份将激活一个宏,该宏将更改给定年份显示的信息。我想编写宏,这样两个图表中的信息都会发生变化,即使只选择了两个菜单中的一个菜单项。而且。我想让两个下拉菜单都更新。也就是说,我从图表A的下拉列表中选择“2010”,图表A和图表B现在都显示2010年的数据,图表B下的菜单现在显示2010年 我开始编写以下宏: Sub

好的,我的情况如下:

我的工作簿中有两个数据透视图,图表a和图表B(在单独的表格上…它们是大图表)。每个图表下都有一个数据验证下拉菜单,其中列出了年份(2010-2020)。在菜单中选择年份将激活一个宏,该宏将更改给定年份显示的信息。我想编写宏,这样两个图表中的信息都会发生变化,即使只选择了两个菜单中的一个菜单项。而且。我想让两个下拉菜单都更新。也就是说,我从图表A的下拉列表中选择“2010”,图表A和图表B现在都显示2010年的数据,图表B下的菜单现在显示2010年

我开始编写以下宏:

Sub Chart2010()
'
' Chart2010 Macro
'

'
    Application.ScreenUpdating = False

    ReturnSheet = ActiveSheet.Name

    Sheets("VP MfgGroupPivot").Select
    ActiveSheet.PivotTables("MfgGroupPivot").ClearTable
    With ActiveSheet.PivotTables("MfgGroupPivot").PivotFields( _
        "VP: Manufacturer Group")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("MfgGroupPivot").PivotFields( _
        "E: Propulsion System Design")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("MfgGroupPivot").AddDataField ActiveSheet.PivotTables( _
        "MfgGroupPivot").PivotFields("VCR 2010"), "Sum of VCR 2010", xlSum

    Columns("B:H").Select
    Selection.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"

    Sheets("DCS MfgPivot").Select
    ActiveSheet.PivotTables("DCSMfgPivot").ClearTable
    With ActiveSheet.PivotTables("DCSMfgPivot").PivotFields( _
        "VP: Manufacturer Group")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("DCSMfgPivot").PivotFields( _
        "E: Propulsion System Design")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("DCSMfgPivot").AddDataField ActiveSheet.PivotTables( _
        "DCSMfgPivot").PivotFields("DCS Rev 2010"), "Sum of DCS Rev 2010", xlSum

    Columns("B:H").Select
    Selection.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"

    If ReturnSheet = "VP MfgGroupChart" Then
        Sheets("DCS MfgChart").Select
        [C37].Value = 2010
    ElseIf ReturnSheet = "DCS MfgChart" Then
        Sheets("VP MfgGroupChart").Select
        [C37].Value = 2010
    End If

    Sheets(ReturnSheet).Select

End Sub
这似乎是可行的。。。如果不是因为例程根据下拉更改(如下)调用宏,它应该

因此,Chart2010例程末尾的if语句会导致无限循环,因为调用宏是基于工作表更改的

所以问题是(很抱歉这么冗长),有没有一种方法可以让两个下拉菜单在不反复调用宏的情况下进行更新

谢谢

-Sean

在事件过程中尝试关闭(禁用)
事件
一段时间:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    'add this at the beginning
    Application.EnableEvents = false

   'your Select case code here

   'add this at the end
    Application.EnableEvents = true

End Sub

这正是我需要的!非常感谢你的帮助!
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    'add this at the beginning
    Application.EnableEvents = false

   'your Select case code here

   'add this at the end
    Application.EnableEvents = true

End Sub