Исправление Excel Pivot Drillthrough с VBA для суммы 1 / 0s по нескольким полям - PullRequest
0 голосов
/ 14 июня 2019

У меня есть данные больницы на SQL-сервере, которые относятся к пациентам, у которых либо есть дата (это нормально), либо есть дата, которую необходимо пересмотреть, либо нет даты. Сохраняя по одной строке для каждого пациента, я добавил в конце набора данных 3 столбца для этих 3 столбцов («Дата», «ToBeReviewed» и «NoDate»). Там заполняется 1, если применимо, иначе NULL. Затем у меня также есть вычисление для «Всего», которое просто суммирует эти 3 столбца.

Я извлекаю данные в сводную таблицу Excel с помощью хранимой процедуры, связанной с этим набором данных, и суммирую эти 4 столбца. Я хочу, чтобы при детализации отображались только данные, как это показано в сводной таблице, но следует признать, что сводные таблицы не работают таким образом, и вам необходим VBA для удаления значений NULL. Я не смог выполнить эту работу должным образом, так как есть 3 разных столбца - хотя у меня есть приведенный ниже код для работы с одним столбцом ранее.

Нашел приведенный ниже код в Интернете, но я не знаю, как изменить его, чтобы учесть несколько имеющихся у меня столбцов. Я попытался повторить код для каждого из 4 столбцов, которые у меня есть, работая на fieldno, но это не сработало, как ожидалось.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim PTCll As PivotCell

On Error Resume Next
Set PTCll = Target.PivotCell
On Error GoTo 0

If Not PTCll Is Nothing Then
  If PTCll.PivotCellType = xlPivotCellValue Then
    Cancel = True
    Target.ShowDetail = True
      If Not IsError(Application.Match(PTCll.DataField.SourceName, Array("Metric1", "Metric2", "Metric4", "Metric5", "Metric6", "Metric7"), 0)) Then
      With ActiveSheet
        FieldNo = Application.Match(PTCll.DataField.SourceName, .Rows(1), 0)
        If Not IsError(FieldNo) Then
          With .ListObjects(1)
            .Range.AutoFilter Field:=FieldNo, Criteria1:="="
            .DataBodyRange.EntireRow.Delete
            .Range.AutoFilter Field:=FieldNo
          End With
          .Range("A1").Select
        End If
      End With
    End If
  End If
End If
End Sub

Ожидаемый результат будет в том, что можно будет щелкнуть ячейку в сводной таблице, поскольку она отображает общую сумму в любом из этих 4 столбцов, и получить детализацию, которая совпадает с цифрой в сводной таблице

...