Как мне получить данные строки сводной таблицы vba в два столбца вместо одного столбца? - PullRequest
0 голосов
/ 22 января 2019

Я довольно новичок в кодировании VBA в Excel, и я пытаюсь создать сводную таблицу, используя VBA, где у меня есть табельный номер (Pers.No.) и имя сотрудника (Фамилия Имя), которые должны быть в двух разные столбцы, поэтому они отображаются в одной строке, т. е. мне нужна 1 строка данных на человека.

Я искал в Интернете исправление и пробовал несколько разных способов исправить это, но независимо от того, что я делаю, он выводит имя и табельный номер в одном столбце

Sub Pivot2Create()

'Declare Variables
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim LastRow As Long
Dim LastCol As Long
Dim wb1 As Workbook


Set wb1 = ThisWorkbook

Application.ScreenUpdating = False
'Insert a New Blank Worksheet
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Second Pivot").Delete
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "Second Pivot"
Application.DisplayAlerts = True
Set PSheet = Worksheets("Second Pivot")
Set DSheet = Worksheets("Current Report")

'Define Data Range
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

'Define Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="Uniper3rdParty")

'Insert Blank Pivot Table
Set PTable = PCache.CreatePivotTable _
(TableDestination:=PSheet.Cells(1, 1), TableName:="Uniper3rdParty")

'Insert Row Fields
    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Pers.No.")
    .Orientation = xlRowField
    .RowAxisLayout (xlTabularRow)
    .Position = 1
    End With

    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Last name First name")
    .Orientation = xlRowField
    .RowAxisLayout (xlTabularRow)
    .Position = 2
    End With

'Insert Column Fields
    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Wage Type Long Text")
    .Orientation = xlColumnField
    .Position = 1
    End With

'Insert Data Field
    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Amount")
    .Orientation = xlDataField
    .NumberFormat = "#,##0.00"
    End With

Я не знаю, полностью ли я испорчен или у меня не осталось кода, и я просто упускаю что-то действительно простое. Буду признателен за любую помощь, которую может оказать каждый

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Используйте "Классический свод" (и, возможно, удалите промежуточные итоги)

Sub FormatPivot()
    With ActiveSheet.PivotTables("Uniper3rdParty")
        .InGridDropZones = True
        .RowAxisLayout xlTabularRow
    End With
    ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Pers.No.").Subtotals = _
        Array(False, False, False, False, False, False, False, False, False, False, False, False)
End Sub

enter image description here

0 голосов
/ 22 января 2019

Попробуйте следующее

With Psheet.PivotTables("Uniper3rdParty")
'What you asked
    .RowAxisLayout xlTabularRow
'Personally, I would add the below rows but feel free to remove them
    dim pf as PivotField
    For Each pf In .PivotFields
        pf.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
    Next pf
    .ShowDrillIndicators = False
End With
...