使用VBA创建时的数据透视表错误

时间:2016-05-30 13:31:40

标签: excel-vba vba excel

Good mrng!

我正在尝试使用vba创建数据透视表,我是非常新的使用vba进行数据透视,我试图尽可能地在谷歌中进行研究以便更正但是没有找到可以帮助我修复它的更多信息,如果有人能帮助我,那将是非常有帮助的。

范围 - 始终从A10开始,列将固定为H但行数不固定因此我尝试定义范围并在代码中使用它但它将我扔到错误消息下方,请检查并纠正我< / p>

面临的问题 - 无法将Rng定义为范围且无法在数据透视表中使用此范围。

Rng as Range

运行时错误&#39; 91&#39;:对象变量或未设置黑色方差

透视缓存

运行时错误&#39;&#39;:对象不支持此属性或方法

数据

ACT AN货币CB LC类型CB FC类型SI 1001 c USD 2,031 Dr 2,031 Dr 0005
1002 a BHD 1,194 Dr 1,194 0105 010 1003 P EUR 326 Dr 326博士0110
1004 AR英镑60,467博士60,467博士0125
1005 AP DHS(73,080)Cr(73,080)Cr 0190

Sub Pivot()

Dim ws As Worksheet
Dim pc As PivotCache
Dim pt As PivotTable
'Dim Rng As Range

'Defining Range

Rng = Range("A10").Select
Rng = Range(Selection, Selection.End(xlToRight)).Select
Rng = Range(Selection, Selection.End(xlDown)).Select



'Adding new worksheet
Set ws = Worksheets.Add
'Creating Pivot cache
Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, "Working!Rng").Select


'Creating Pivot table
Set pt = pc.CreatePivotTable(ws.Range("B3"))
'Setting Fields
With pt
'set row field
With .PivotFields("SI")
.Orientation = xlRowField
.Position = 1
End With
'set column field
With .PivotFields("Currency")
.Orientation = xlColumnField
.Position = 1
End With

End With

End Sub

感谢您的帮助!

此致 Suresh7860

1 个答案:

答案 0 :(得分:0)

尝试使用以下代码作为您需要的示例。如果有什么不清楚我会很乐意回答。但是如果我为你编写代码,你将无法学习。

Sub BuildPT()

    Dim pvtTbl As PivotTable
    Dim pvtCha As PivotCache
    Dim pvtDestWS As Worksheet
    Dim pvtSrcWS As Worksheet
    Dim pvtWB As Workbook
    Dim pvtSrcRng As Range
    Dim pvtStrt As Range
    Dim keyRng As Range
    Dim LastRow As Integer
    Dim LastCol As Integer

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual      

    On Error Resume Next
        pvtWB.Worksheets("Total").Delete 'Delete PT destination sheet
    On Error GoTo 0

    Set pvtSrcWS = pvtWB.Worksheets("Data") 'Set source sheet name

    'Here I find the last row and column containing data

    LastRow = pvtSrcWS.Cells.Find(What:="*", After:=pvtSrcWS.Range("A1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False, MatchByte:=False).row
    LastCol = pvtSrcWS.Cells.Find(What:="*", After:=pvtSrcWS.Range("A1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False, MatchByte:=False).Column


    Set pvtSrcRng = Range(pvtSrcWS.Cells(1, 3), pvtSrcWS.Cells(LastRow, LastCol)) 'Set the range that contains the source data

    Set pvtDestWS = pvtWB.Sheets.Add 'Add the destination sheet
    pvtDestWS.Name = "Total" 'Rename destination sheet

    Set pvtStrt = pvtDestWS.Cells(1, 1) 'Set the PT start location

    'Here I create the pivot cache, the container that holds pivot table data
    'Then I create the pivot table itself
    Set pvtCha = pvtWB.PivotCaches.Create(xlDatabase, pvtSrcRng)
    Set pvtTbl = pvtCha.CreatePivotTable(TableDestination:=pvtStrt, TableName:="Test PT")

    'Now I add the fields I need
    With pvtTbl
        With .PivotFields("Amount")
            .Orientation = xlDataField
            .Function = xlSum
            .NumberFormat = "#,##0"
        End With
        With .PivotFields("Account")
            .Orientation = xlPageField
            .CurrentPage = "513035"
        End With
        .PivotFields("Key").Orientation = xlRowField
        .RepeatAllLabels xlRepeatLabels
    End With

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub