Страницы: 1
RSS
Смена источника данных для сводной таблицы, Смена источника данных для сводной таблицы
 
Добрый день.
Прошу не судить меня строго, только изучаю VBA.
Не хватает своих мозгов и гугл не помог в решении задачи (возможно просто не понимаю, что мне нужно).

Есть файлик со сводной таблицей и нужно сделать  выбор источника данных для нее из других файлов.
Так как планируется выгрузка данных за разные периоды и имена источников могут меняться.

Записал код обновления сводной таблицы в файле "1" с помощью макрорекордером и пытаюсь изменить источник данных в SourceData, но ничего не выходит.
По остальной части кода посмотрел в интернете по забору данных с одной книги в другую.

Буду благодарен любой помощи.

Спасибо!


Код
Sub updateTables()

Dim kniga As String
Dim tk As String
Dim ok As String

kniga = Application.GetOpenFilename
tk = ThisWorkbook.Name
ok = Dir(kniga)
GetObject (kniga)
ActiveSheet.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. 
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Workbooks(ok).Worksheets("Лист1").Range("G:I"), Version:=xlPivotTableVersion15)

Workbooks(ok).Close (False)


End Sub
 
Такой код работать не будет. Попробуйте разобраться вот в таком коде (см. файл):
Код
Sub Макрос4()
    Dim myFileName As String
    myFileName = "'" & Cells(1, 2) & "[" & Cells(2, 2) & "]" & Cells(3, 2)
    ActiveSheet.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        myFileName, _
        Version:=xlPivotTableVersion15)
End Sub
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Доброе время суток
Цитата
Михаил Лебедев написал:
.ChangePivotCache
Можно ещё проще - без создания нового кэша, если структура данных такая же
Код
Public Sub ChangePivotSource()
    Dim pPivot As PivotTable, pCache As PivotCache
    Set pPivot = Workbooks("pivot.xlsx").Worksheets("MySheetWithPivotName").PivotTables("MyPivotTableName")
    Set pCache = pPivot.PivotCache
    pCache.SourceData = "'D:\Path\[source2.xlsx]Лист1'!R1C1:R9C3"
End Sub
 
Структура данных меняться не будет, но будет меняться каждый раз имя.
Поэтому я и хочу сделать через выбор нужной книги.
А не зашивать строго путь файла и диапазон.  
 
Да что ему еще надо ?)
Уже в SourceData получаю нужный источник в нужном формате и все равно не так...
Код
Sub updateTables()

FullPath = Application.GetOpenFilename
i = InStrRev(FullPath, "\")
Name = Mid(FullPath, i + 1)
Folder = Left(FullPath, i - 1)


pvtRange = "[" & Name & "]" & Sheets(1).Name & "!" & Sheets(1).Cells(1, 1) _
.Resize(Sheets(1).UsedRange.Rows.Count, _
Sheets(1).UsedRange.Columns.Count).Address(1, 1, 0, 0)

GetObject (FullPath)
ActiveSheet.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:=pvtRange, _
        Version:=xlPivotTableVersion15)


End Sub
Изменено: ikos93 - 10.10.2019 14:14:08
Страницы: 1
Наверх