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