2016-05-30 4 views
0

Хорошее mrng!Ошибка сводной таблицы при использовании с использованием VBA

Я пытаюсь создать сводную таблицу с помощью vba, и я очень новичок в pivot, используя vba, и я попытался исследовать в google как можно больше, чтобы исправить это, но не нашел много информации, которая может помочь мне исправить это, было бы очень полезно, если кто-нибудь сможет мне помочь в этом.

Диапазон - всегда начинается с A10, столбцы будут фиксированы до H, но количество строк не фиксировано, поэтому я попытался определить диапазон и использовать его в коде, но его бросая меня ниже сообщения об ошибке, пожалуйста, проверьте и исправьте меня

Проблемы, с которыми сталкиваются, - не могут определять Rng как Range и не могут использовать этот диапазон в сводной таблице.

Rng, как Range

время выполнения ошибки '91': переменная объекта или с черной дисперсией не установлена ​​

Pivot кэш

Run Time ошибка '438': Объект не поддерживает это свойство или метод

данных

ACT Валюта CB LC Тип CB FC Тип SI 1001 с 2031 USD Dr 2031 Д-р 0005
1002 BHD 1194 Д 1194 Д 0105
1003 P EUR 326 Д 326 Д 0110
1004 AR GBP 60467 Д 60467 Д 0125
1005 А.П. ДМО (73080) Cr (73080) Кт 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

Ваш первый вопрос в том, что вы должны сказать «Set RNG = ...» – jcarroll

+1

В дополнение к тому, что @jcarroll сказал, что вы можете удалить все '.Select' в конце, как так:' Set Rng = Диапазон ("A10") '. Кроме того, почему вы повторно назначаете 'rng' в течение трех последовательных строк? Наконец, для меня не имеет смысла, что вы сначала «создаете» новый PivotCache, а затем создаете сводную таблицу (без отношения к кешу). Кажется, что не существует источника данных для вашей сводной таблицы. Вы пробовали [записывать макрос] (https://www.youtube.com/watch?v=Q_HQGHPBYoo) и читать/понимать его? – Ralph

+0

Привет @Ralph, я попытался использовать код, который я получил в Google, и попытался отредактировать его в соответствии с моим требованием, но не работал, и я впервые использовал vba для сводных таблиц, так что полностью потерял, что делать, поэтому задал вопросы, которые я при редактировании кода. – suresh7860

ответ

0

Try и используйте код, приведенный ниже в качестве образца для того, что вам нужно. Если что-то неясно, я с удовольствием отвечу. Но вы не узнаете, напишу ли я код для вас.

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 
+0

Спасибо @jcarroll попробуем это и вернемся к вам .. я его не записал, а использовал какой-то другой код и попытался отредактировать его в соответствии с моим требованием, но не работал ... попытается проверить очки и узнать из это и я новичок в vba для pivots, так что совершенно не уверен, что использовать где. еще раз спасибо – suresh7860

Смежные вопросы