Источник сводной таблицы не изменит рабочую книгу в VBA? - PullRequest
0 голосов
/ 16 октября 2018

Хорошо, это беспокоило меня уже пару дней.Надеюсь, кто-нибудь где-нибудь обнаружит глупую ошибку?

Предпосылка:

У меня есть рабочая книга с данными. На одной из вкладок есть список данных в столбцах AD и сводная таблица.основанный на том, что закреплено в ячейке F3.Один из макросов в рабочей книге Copy превратит этот рабочий лист (и несколько других, не относящихся к вопросу) в новую рабочую книгу с ThisWorkbook.Worksheets(aTMP).Copy After:=wkb.Worksheets(wkb.Worksheets.Count), где aTMP - массив, содержащий имена рабочих листов.

К сожалению, из-за этого сводная таблица в новой рабочей книге указывается на таблицу в исходном рабочем листе / рабочей книге - , а не новой.«Нет проблем!» - подумал я.«Я просто изменю .PivotCache.SourceData, чтобы он указывал на правильный файл - это будет легко».Мальчик, я был не прав ...

Код:

(включая Debug.Print утверждений, которые я добавил, пытаясь решить эту проблему самостоятельно)

Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData
    'This is "'Z:\FilePath\[WorkbookName]Calculate_PivotTable'!C1:C4"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).Columns("A:D").Address(True, True, xlR1C1, True)
    'This is "[Book1]Calculate_PivotTable!C1:C4"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceType
    ' This is 1
''''
wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData = _
    wkb.Worksheets(wsTableAndPivot.Name).Columns("A:D").Address(True, True, xlR1C1, True)
    'This is the line that throws an error
''''
Debug.Print "-----"
    'The following values are after I MANUALLY intervene, as detailed in "The Error"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData
    'This is "Calculate_PivotTable'!C1:C4"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceType
    ' This is 1

Ошибка:

Если я просто запускаю код, я получаю довольно бесполезную ошибку:

Номер ошибки -1004
Ошибка приложения или объекта

Однако , если я поставлю точку останова на строку, которая выдает ошибку, вручную изменим Исходные данные, чтобы они указывали на ту же рабочую книгу (например, Диапазон A1:D2), и затем запустите строку, она работает правильно и устанавливает исходные данные для всех столбцов.

(NB. Как я знаю, защищенные листы могут вызывать проблемы с сводными таблицами, я уже проверял, что нетнет)

1 Ответ

0 голосов
/ 16 октября 2018

Я столкнулся с подобной проблемой и разместил об этом здесь в SO.

Вы можете увидеть, подойдет ли вам решение 1004 *, которое я придумал.

По сути, я создал новый сводный кэш для каждой сводной таблицы из данных на листе.Возможно, не оптимально, но это было единственное, что я нашел, что сработало.

...