Alright, вот моя ситуация:Excel VBA: Макросы, присвоенные меню проверки данных
У меня есть два сводных диаграмм в книге, Диаграмма A и B диаграммы (на отдельных листах ... они большие диаграммы). Под каждой диаграммой находится раскрывающееся меню проверки данных с годами, указанными в них (2010-2020). При выборе года в меню активируется макрос, который изменяет информацию, отображаемую для данного года. Я хотел бы написать макросы, чтобы информация в диаграммах BOTH изменялась, даже если выбран элемент только из одного из двух меню. Более того. Я бы хотел сделать так, чтобы выпадающее меню BOTH обновилось. То есть я выбираю «2010» из раскрывающегося списка для диаграммы A, BOTH Chart A и Chart B теперь отображает данные за 2010 год, и теперь отображается меню под диаграммой B.
Я начал и написал следующее макрос:
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
Это кажется, что это будет работать ... и он должен, если бы не рутина, которая вызывает макросы на основе выпадающего списка изменения (ниже)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Range("C37")
Case "2010"
Call Chart2010
Case "2011"
Call Chart2011
Case "2012"
Call Chart2012
Case "2013"
Call Chart2013
Case "2014"
Call Chart2014
Case "2015"
Call Chart2015
Case "2016"
Call Chart2016
Case "2017"
Call Chart2017
Case "2018"
Call Chart2018
Case "2019"
Call Chart2019
Case "2020"
Call Chart2020
End Select
End Sub
Так оператор my if в конце процедуры Chart2010 вызывает бесконечный цикл, так как вызов макросов является базовым ed при изменении листа.
Итак, вопрос (и извините за то, что вы так долго наматывались), есть ли способ сделать оба раскрывающихся меню обновлением без вызова макроса снова и снова?
Спасибо.
-Sean
Это именно то, что мне нужно! Большое спасибо за помощь! – detroitwilly