Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Pivot: 1 Datenschnitt und 1 Zeitachse 2 Quellen


Betrifft: Pivot: 1 Datenschnitt und 1 Zeitachse 2 Quellen von: Alesandro
Geschrieben am: 26.03.2018 20:13:21

Liebe Forumsgemeinde,

ich habe ein Problem mit dem ich mich gerne an Euch wenden möchte ;-)

In der beigefügten Datei werte ich,
mittels 2 Pivottabellen (im Tabellenblatt "EXECUTED TESTS - PROJEKT - MA")
2 unterschiedliche Quelldateien aus.
Es werden die geplanten Testfälle (Quelle Tabellenblatt "Verplanungsdaten_OSQ")
mit den ausgeführten Testfällen (Quelle Tabellenblatt "Rohdaten_letzte_Testausfuehrung" verglichen und in den Zeilen 12 - 15 die Berechnungen angezeigt.

Problem:
Da es sich um unterschiedliche Quelldateien handelt, muss man 2 Datenschnitte und 2 Zeitachsen anlegen.
Es nervt mich jedoch, dass ich 2-mal dasselbe auswählen muss.

Frage:
Wäre es möglich, dass man nur einen Datenschnitt (GEPLANT FÜR)
und Zeitachse (GEPLANTER ZEITRAUM)anlegt und mittels VBA die ausgewählten Werte in die PivotTable1 übernimmt.
Dh PivotTable2 wird über Datenschnitt und Zeitachse gefiltert und die selben Filterwerte in die PivotTable1 via VBA übernommen.

Ich hoffe, dass mein Anliegen verständlich beschrieben wurde.

Es würde mich sehr freuen,
wenn mir jemand helfen könnte.

https://www.herber.de/bbs/user/120685.xlsm

lg Alesandro

  

Betrifft: AW: Pivot: 1 Datenschnitt und 1 Zeitachse 2 Quellen von: Luschi
Geschrieben am: 27.03.2018 17:13:07

Hallo

schreibe diesen Code ins Klassenmodul der Tabelle19(EXECUTED TESTS - PROJEKT - MA):

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Dim sc As SlicerCache, sc1 As SlicerCache, sci As SlicerItem
       
    Set sc = ActiveWorkbook.SlicerCaches("Datenschnitt_Name")    'ausgeführt
    Set sc1 = ActiveWorkbook.SlicerCaches("Datenschnitt_Name1")  'geplant
    Application.EnableEvents = False
    
    sc.ClearManualFilter
    For Each sci In sc1.SlicerItems
        'Debug.Print sci.Name
        sc.SlicerItems(sci.Name).Selected = sci.Selected
    Next sci
    
    'Target.RefreshTable
    
    Application.EnableEvents = True
    Set sc = Nothing
    Set sc1 = Nothing
End Sub
Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Pivot: 1 Datenschnitt und 1 Zeitachse 2 Quellen von: Alesandro
Geschrieben am: 28.03.2018 08:06:41

Hallo Luschi,

vielen Dank für deine Bemühungen.

Ein Kollege hat mir inzwischen folgenden funktionierenden Code geschrieben.

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)


Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

Dim date1 As Date
Dim date2 As Date


 date1 = ActiveWorkbook.SlicerCaches("NativeZeitachse_Von").TimelineState.FilterValue1
 date2 = ActiveWorkbook.SlicerCaches("NativeZeitachse_Von").TimelineState.FilterValue2
' MsgBox date1 & " " & date2
 ActiveWorkbook.SlicerCaches("NativeZeitachse_EXECUTION_DATE").TimelineState. _
        SetFilterDateRange date1, date2



   Dim oSlicercache1    As SlicerCache
   Dim oSlicercache2    As SlicerCache
   Dim oSlicerItem1     As SlicerItem
   Dim oSlicerItem2     As SlicerItem
   Dim oSlicerItem      As SlicerItem


   Application.Volatile

   Set oSlicercache1 = ActiveWorkbook.SlicerCaches("Datenschnitt_Name3")
   Set oSlicercache2 = ActiveWorkbook.SlicerCaches("Datenschnitt_Name2")

   oSlicercache2.ClearAllFilters


   On Error Resume Next
   For Each oSlicerItem In oSlicercache2.SlicerItems
      Set oSlicerItem1 = oSlicercache1.SlicerItems(oSlicerItem.Name)
      If oSlicerItem1 Is Nothing Then
       '  MsgBox oSlicerItem.Name
         oSlicerItem.Selected = False
      End If
      Set oSlicerItem1 = Nothing
   Next oSlicerItem

   On Error Resume Next
   For Each oSlicerItem1 In oSlicercache1.SlicerItems
    Set oSlicerItem2 = oSlicercache2.SlicerItems(oSlicerItem1.Name)
    If Not oSlicerItem2 Is Nothing Then
      'MsgBox oSlicerItem1.Name & oSlicerItem1.Selected
      oSlicerItem2.Selected = oSlicerItem1.Selected
    End If
    Set oSlicerItem2 = Nothing
   Next oSlicerItem1
On Error GoTo 0

ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
ActiveSheet.PivotTables("PivotTable2").PivotCache.Refresh

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True


Rows.EntireRow.Hidden = False
Rows(Range("A19").End(xlDown).Row + 3 & ":300").EntireRow.Hidden = True


End Sub
lg Alesandro


  

Betrifft: AW: Pivot: 1 Datenschnitt und 1 Zeitachse 2 Quellen von: Luschi
Geschrieben am: 28.03.2018 09:29:17

Hallo Alesandro,

jetzt darfst Du 3mal überlegen, warum Dein Kollege 'On Error Resume Next' benötigt
und ich nicht und warum ich mit wesentlöich weniger Code auskomme und das gleiche mache.
Viel Spaß beim Überlegen.

Gruß von Luschi
aus klein-Paris