2014-10-21 3 views
0

Я работаю на книгу Excel, которая содержит ряд рабочих листов, которые все работают очень похожим образом:
1. Они имеют PivotTable1
2. Они имеют PivotChart1
3. 4 слайсер используются для фильтрации данных
4. И, наконец, я создал форму, с VBA кодом за ними, чтобы позволить мне контролировать функциональность DrilldownExcel 2010 VBA Shape Control

Это Взяло некоторое время, исследуя различные места для образца код, запись и переваривание того, что происходит с макросами, чтобы добраться до того места, где я есть. И я очень доволен текущим результатом.

Однако, сейчас я на сцене, где я хотел бы убедиться, что код как можно более эффективным, чтобы
1. Держите размер файла как можно
2. Убедитесь, что рабочая скорость в лучшем случае

Итак, к моей проблеме.

У меня есть 4 кнопки, которые сделаны со стандартными формами Excel. Мой код VBA для каждой кнопки выглядит следующим образом:

Sub Top10SelectorByValue() 
' 
' Top10Selector Macro 
'  
Range("Q15").Select 
' 
' Clear All Filters 
' 
    ActiveSheet.PivotTables(ActiveCell.PivotTable.Name).PivotFields(ActiveCell.PivotField.Name). _ 
ClearAllFilters 
' 
' Apply Top 10 Filter 
' 
    ActiveSheet.PivotTables(ActiveCell.PivotTable.Name).PivotFields(ActiveCell.PivotField.Name). _ 
    PivotFilters.Add Type:=xlTopCount, DataField:=ActiveSheet.PivotTables(_ 
    ActiveCell.PivotTable.Name).PivotFields("Sum of LineTotalValue"), Value1:=10 
' 
' Format Shapes 
' 
    ActiveSheet.Shapes(Application.Caller).ThreeD.BevelTopType =  IIf(ActiveSheet.Shapes(Application.Caller).ThreeD.BevelTopType = 3, 7, 3) 
    ActiveSheet.Shapes("btnTop30").ThreeD.BevelTopType = 3 
    ActiveSheet.Shapes("btnTop20").ThreeD.BevelTopType = 3 
    ActiveSheet.Shapes("btnSelectAll").ThreeD.BevelTopType = 3 

    End Sub 

Как уже упоминалось, у меня есть этот код для каждого из моих кнопок, которые представляют собой TOP30, TOP20, и в Топ 10 вариантов SelectAll для моего клиента нажать на кнопку.

Так вот мои 2 вопроса:
1. Можно ли сделать этот код более эффективным, так что я могу установить все кнопки, с тем же стилем, за исключением одного щелчка любым другим способом, чем я дружнее Вот.
2. Возможно ли иметь только один экземпляр этого кода, доступный для всех кнопок. 3. Я хотел бы, чтобы гарантировать, что по крайней мере один параметр выбран из 4 кнопок, тем самым оставляя его в это «вниз» состояние

Большое спасибо, я новичок VBA, поэтому, пожалуйста, медведь со мной

ответ

0

Быстрый ответ Часть 3. Назовите все ваши кнопки что-то вроде «btnSlice10», btnSlice20" , и т.д., и назначить один обработчик для всех из них.

Sub ClickMe() 

Dim b As String, s As Shape, clr As Long, btnName As String 
Dim v, pt as PivotTable, pf as PivotField 

    b = Application.Caller 

    For Each s In ActiveSheet.Shapes 
     If s.Name Like "btnSlice*" Then 
      clr = IIf(s.Name = b, vbRed, vbYellow) 
      s.Fill.ForeColor.RGB = clr 
     End If 
    Next s 

    If b Like "btnSlice*" Then 
     With ActiveSheet 

      Set pt = .PivotTables(.Range("Q15").PivotTable.Name) 
      Set pf = pt.PivotFields(.Range("Q15").PivotField.Name) 

      pf.ClearAllFilters 

      v = -999 
      Select Case b 
       Case "btnSlice10": v = 10 
       Case "btnSlice20": v = 20 
       Case "btnSlice30": v = 30 
      End Select 

      If v > 0 Then 
       pf.PivotFilters.Add Type:=xlTopCount, _ 
        DataField:=pt.PivotFields("Sum of LineTotalValue"), _ 
        Value1:=v 
      Else 
       'code for slice="all" 
      End If 

     End With 
    End If 
End Sub 

Подставьте кнопку форматирования для простого примера. ..

Вы можете расширить это чтобы добавить общие части существующего кода фильтрации, затем используйте Select Case по значению b, чтобы вызвать соответствующий Sub, который выполняет часть, зависящую от кнопки.

+0

Спасибо за этот Тим, проработал угощение. Теперь мне нужно разобраться, как правильно применить фильтр для каждой кнопки :) –

+0

См. Мое редактирование выше ... –

+0

Тим, я не могу вас поблагодарить. Это работает как шарм и дает мне представление о том, как я могу применить его к другим кнопкам. Еще раз спасибо –

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