2016-08-26 1 views
0

Я пытаюсь создать сводную таблицу, используя VBScript. Я думаю, что я близок к его достижению, но я не знаю, как создать фильтр отчетов и настроить фильтр для «Внутренний», или как использовать сумму вместо count в значениях.Создание сводной таблицы с VBScript

Это то, что я сейчас:

xlA1 = 1 
xlDatabase = 1 
xlRowField = 1 
xlColumnField = 2 
xlFilterField = 3 

Set xlBook1 = objExcel.WorkBooks.Open(ws_path & "FINAL.xlsx") 
set rngData =xlBook1.Sheets("NONPO").Usedrange 
set rngReport = xlBook1.Sheets("NONPO").Range("CE1") 

set pvtCache = xlBook1.pivotCaches.add(xlDatabase, rngData.address(true, true, xlA1, true)) 
set pvtTable = pvtCache.createPivotTable(rngReport, "Pivot1") 

pvtTable.pivotFields("Date").orientation =xlRowField 
pvtTable.pivotFields("Country Code").orientation = xlColumnField 
pvtTable.pivotFields("Agent Type").orientation = xlFilterField 
'*****Here I should Use filter as "Internal"***** 

pvtTable.pivotFields("Hours").orientation = xlsum *****xlsum is not working***** 

ответ

0

Я считаю, что это то, что вы хотите.

pt.AddDataField(pt.PivotFields("Hours"), "Hours", _ 
    Excel.XlConsolidationFunction.xlSum) 

Итак, все это должно выглядеть примерно так (изменить для ваших нужд).

Private Sub CreatePivotTable(tableName As String) 
    Dim targetSheet As Excel.Worksheet = ExcelApp.Sheets.Add 
    Dim ptName As String = "MyPivotTable" 

    'We'll assume the passed table name exists in the ActiveWorkbook 
    targetSheet.PivotTableWizard(Excel.XlPivotTableSourceType.xlDatabase, _ 
     tableName, targetSheet.Range("A5")) 
    targetSheet.Select() 

    Dim pt As Excel.PivotTable = targetSheet.PivotTables(1) 

    'To be professional or merely resuable, the name could be passed as parameter 
    With pt.PivotFields("Order Date") 
     .Orientation = Excel.XlPivotFieldOrientation.xlRowField 
     .Position = 1 
    End With 

    pt.AddDataField(pt.PivotFields("Order Total"), "Order Count", _ 
     Excel.XlConsolidationFunction.xlCount) 
    pt.AddDataField(pt.PivotFields("Order Total"), "Total for Date", _ 
     Excel.XlConsolidationFunction.xlSum) 

    '--OR-- 
    'AddPivotFields(pt, "Order Total", "Order Count", _ 
    ' Excel.XlConsolidationFunction.xlCount) 
    'AddPivotFields(pt, "Order Total", "Total For Date", _ 
    ' Excel.XlConsolidationFunction.xlSum) 

    Marshal.ReleaseComObject(pt) 
    Marshal.ReleaseComObject(targetSheet) 
End Sub 
0

должен работать, как это ...

With pvtTable.pivotFields("Hours") 
    .orientation = 4 
    .Function = xlSum 
    End With 
+1

Спасибо за этот фрагмент кода, который может обеспечить некоторую ограниченную, немедленную помощь. A [надлежащее объяснение] (https://meta.stackexchange.com/q/114762/349538) значительно улучшит его долгосрочную ценность, показывая, почему это является хорошим решением проблемы и сделает более полезным будущим читателям с другими, подобными вопросами. Пожалуйста, отредактируйте свой ответ , чтобы добавить некоторое объяснение, включая сделанные вами предположения. –