2013-07-01 3 views
0

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

ответ

2

Попробуйте выключить (отключить) events на некоторое время в процедуре события:

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 
+0

Это именно то, что мне нужно! Большое спасибо за помощь! – detroitwilly

Смежные вопросы