Форум программистов «Весельчак У»

Программирование => VisualBasic => Тема начата: SCRIBE от 03-11-2016 11:47



Название: Переименовать модель сводной таблицы через VBA
Отправлено: SCRIBE от 03-11-2016 11:47
Всем привет.

Задача переименовать модель сводной таблицы.

Создание модели:
Код: (Visual Basic)
 Dim rng As Range
    Set rng = Sheets(1).Range("A1:B2")
    ThisWorkbook.Connections.Add2 "mConn", "mDesc", "WORKSHEET;Книга1", rng, 7, True, False

Узнать имя этой модели:
Код: (Visual Basic)
Dim mt As ModelTable
Set mt = ActiveWorkbook.Model.ModelTables(1)
MsgBox mt.Name
Если вот так ее создать, на основании неименованного диапазона, получится имя "Диапазон", "Диапазон1" et cetera.
Свойство Name объекта ModelTable к сожалению read-only.
Т.е. создать ее надо уже с нормальным именем, именование диапазона ничего не дает.
Буду благодарен за помощь.


Название: Re: Переименовать модель сводной таблицы через VBA
Отправлено: SCRIBE от 03-11-2016 13:23
Решено, дабы назвать модель как надо, нужно создавать ее не через простой диапазон (Range), а через именованную таблицу (ListObjects).
Пример:
Код: (Visual Basic)
Dim rTbl As ListObject, rng As Range
    Set rng = Sheets(1).Range("A1:B2")
    Set rTbl = ActiveSheet.ListObjects.Add(xlSrcRange, rRng, , xlYes)
    rTbl.Name = "my name"
    ActiveWorkbook.Connections.Add2 "Data", "ReportData", "WORKSHEET;Report", rTbl, 7, True, False


Название: Re: Переименовать модель сводной таблицы через VBA
Отправлено: Алексей++ от 04-11-2016 09:39
в экселе попробовал - тоже не нашёл, как книгу переименовать, кроме как SaveAs ))


Название: Re: Переименовать модель сводной таблицы через VBA
Отправлено: SCRIBE от 04-11-2016 13:13
Ну для книги все не так просто, там имя происходит от реального физического файла, так что не сохранив как надо и открыв ее заново, ничего не получится  ;)

Между прочим на модели пришлось забить, то что там можно сделать руками, автоматизировать не удалось, имеются ввиду вычисляемые поля  :(

П.С. Да, они есть и в простых сводных, но, посмотрим что у вас получится написав банальное "=СУММ(ПОЛЕ1)/СЧЕТЗ(ПОЛЕ2)", то то  ;)


Название: Re: Переименовать модель сводной таблицы через VBA
Отправлено: Алексей++ от 04-11-2016 15:03
..::SCRIBE::.., если речь про эксель, то всё, что можно сделать руками, можно и программно. Записывай макрос и анализируй


Название: Re: Переименовать модель сводной таблицы через VBA
Отправлено: SCRIBE от 04-11-2016 17:53
А вот и нет :) Рекордер не пишет, то что делаешь в окне редактирования модели, это как дополнение (PowerPivot) к Экселю, хоть и родное, все же не поддерживется.