Хорошо, это беспокоило меня уже пару дней.Надеюсь, кто-нибудь где-нибудь обнаружит глупую ошибку?
Предпосылка:
У меня есть рабочая книга с данными. На одной из вкладок есть список данных в столбцах 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. Как я знаю, защищенные листы могут вызывать проблемы с сводными таблицами, я уже проверял, что нетнет)