Создание сводки с использованием VBA с указанным c именем листа - PullRequest
0 голосов
/ 23 апреля 2020

Попытка создать сводную область с помощью приведенного ниже кода, но она получает ошибку.

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$EX$45741"), , xlYes).Name _

    = "Table1"

  Range("Table1[[#Headers],[Rec Coverage Area]]").Select



  PivotSheetName = "Pivot Cash " + Format(Date, "MM DD YYYY")

  Sheets.Add.Name = PivotSheetName





  ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _

    "Table1", Version:=xlPivotTableVersion14).CreatePivotTable TableDestination _

    :=PivotSheetName & "!R3C1", TableName:="PivotTable20", DefaultVersion:= _

    xlPivotTableVersion14

Ошибка связана с кодом:

TableDestination _

        :=PivotSheetName & "!R3C1",

Кроме того, ожидание, которое я создаю в первой строке таблицы, создает только для указанного диапазона c: Range("$A$1:$EX$45741")

Но tabke может быть динамическим c может иметь больше столбцов / строк, чем это. Как я могу получить код, который создаст диапазон в соответствии со строкой / столбцом. (Ячейки столбца A будут иметь некоторое значение, поэтому мы можем получить последнюю строку столбца A, а строка 1 будет иметь некоторое значение, чтобы мы могли получить последний столбец строки 1.)

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

О точном определении диапазона (ссылаясь на колонки 1 и диапазон 1, как вы сказали):

Sub RangeDefinition()
 Dim sh As Worksheet, lastRow As Long, lastCol As Long, rng As Range
   Set sh = ActiveSheet 'use here your needed sheet
   lastRow = sh.Range("A" & Rows.count).End(xlUp).Row
   lastCol = sh.Cells(1, Columns.count).End(xlToLeft).Column
   Set rng = sh.Range(sh.Range("A1"), sh.Cells(lastRow, lastCol))
    Debug.Print rng.Address 'in order to check if it returns what you need...
End Sub

Пожалуйста, попробуйте полностью определить ваши переменные. ActiveSheet может вызвать проблемы, если по ошибке ваш активный лист будет другим. В моем коде я использовал ActiveSheet только для целей тестирования, рекомендуя использовать ваше (реальное) имя листа.

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

Для другой проблемы сначала попробуйте: TableDestination:=PivotSheetName & "!R3C1",

вместо TableDestination _

    `:=PivotSheetName & "!R3C1",`

Как минимум, удалить промежуточную пустую строку. Такой способ работает только для последовательных строк.

0 голосов
/ 23 апреля 2020

вероятно, вы можете попробовать вместо

Range("a1").CurrentRegion
...