powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel (VBA) Сводные таблицы. Создание. Обновление.
4 сообщений из 4, страница 1 из 1
Excel (VBA) Сводные таблицы. Создание. Обновление.
    #33389054
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица в Excel, на основе которой необходимо построить сводную.

Возможны 2 ситуации: количество строк в таблице увеличивается, либо таблица очищается (все строки удаляются).

Необходимо создать макрос, который будет формировать сводную таблицу на основе данных исходной таблицы и автоматически обновлять данные при переходе на лист сводной таблицы. Макрос создания сводной таблицы записала. Получилось вот что:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Сводная()

    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Работы!R2C2:R5C15").CreatePivotTable TableDestination:="", TableName:= _
        "СводнаяТаблица1", DefaultVersion:=xlPivotTableVersion10
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells( 3 ,  1 )
    ActiveSheet.Cells( 3 ,  1 ).Select
    ActiveSheet.PivotTables("СводнаяТаблица1").AddFields RowFields:=Array( _
        "ФИО сотрудника", "Наименование услуги", "Данные"), ColumnFields:="Месяц"
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Итого, руб.")
        .Orientation = xlDataField
        .Caption = "Сумма по полю Итого, руб."
        .Position =  1 
        .Function = xlSum
    End With
    ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Итого, у.е."). _
        Orientation = xlDataField
    End Sub

Далее пробую писать свой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Sub SvodTable()
Dim i As Integer
Dim s As String

Sheets("Работы").Activate
Sheets("Работы").Unprotect
' определяю диапазон исходной таблицы  
ActiveSheet.Unprotect
ActiveSheet.Cells( 2 ,  2 ).Select
  i =  2 
      While ActiveSheet.Cells(i,  2 ).Formula <> ""
           i = i +  1 
      Wend
'Range(Cells(2, 2), Cells(i - 1, 16)).Select
s = "Работы!" & Range(Cells( 2 ,  2 ), Cells(i -  1 ,  16 )).Address(ReferenceStyle:=xlR1C1)

' на основе диапазона строю сводную (в этой строке вылетает ошибка -Недопустимое имя сводной таблицы..)
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        s).CreatePivotTable TableDestination:="", TableName:= _
        "СводнаяТаблица1", DefaultVersion:=xlPivotTableVersion10

    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells( 3 ,  1 )
    ActiveSheet.Cells( 3 ,  1 ).Select
    ActiveSheet.PivotTables("СводнаяТаблица1").AddFields RowFields:=Array( _
        "ФИО сотрудника", "Наименование услуги", "Данные"), ColumnFields:="Месяц"
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Итого, руб.")
        .Orientation = xlDataField
        .Caption = "Сумма по полю Итого, руб."
        .Position =  1 
        .Function = xlSum
    End With
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Итого, у.е.")
        .Orientation = xlDataField
        .Caption = "Сумма по полю Итого, у.е."
        .Function = xlSum
    End With
    ActiveWorkbook.ShowPivotTableFieldList = True
End Sub

Короче ничего не строится.
Может быть кто-нибудь решал подобные задачи и поделится куском кода..буду очень признательна...


Аленочка тм
...
Рейтинг: 0 / 0
Excel (VBA) Сводные таблицы. Создание. Обновление.
    #33389169
По поводу кода. Вроде все в порядке.
По поводу ошибки. Другое имя ппробовала давать?

Можешь прикрепить файлик с примером какие данные и как должна выглядить сводная таблица?
...
Рейтинг: 0 / 0
Excel (VBA) Сводные таблицы. Создание. Обновление.
    #33389173
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка
' на основе диапазона строю сводную (в этой строке вылетает ошибка -Недопустимое имя сводной таблицы..)

Аленочка тм

Скорей всего у тебя на листе уже есть содная таблица под именем
"СводнаяТаблица1" ты же пытаешься создать ещё одну под этим же именем, поэтому он выдаёт ошибку
прежде чем создать новую удали старую

Код: plaintext
1.
    ActiveSheet.PivotTables("СводнаяТаблица1").PivotSelect "", xlDataAndLabel
    Selection.Delete Shift:=xlToLeft

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


Аленочка тм

на событие вешай обновление

Private Sub Worksheet_Activate()
Range("A3").Select
ActiveSheet.PivotTables("СводнаяТаблица1").RefreshTable
End Sub
...
Рейтинг: 0 / 0
Excel (VBA) Сводные таблицы. Создание. Обновление.
    #33389212
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо...
Ошибка была такая, хотя даже не ошибка, а невнимательность с моей стороны.
В строке:

Код: plaintext
s = "Работы!" & Range(Cells( 2 ,  2 ), Cells(i -  1 ,  16 )).Address(ReferenceStyle:=xlR1C1)

был обозначен неверный диапазон, нужно было:

Код: plaintext
s = "Работы!" & Range(Cells( 2 ,  2 ), Cells(i -  1 ,  15 )).Address(ReferenceStyle:=xlR1C1)

Хотя до сих пор не понимаю, почему Excel ругался на имя таблицы.
С обновлением тоже разобралась...

Аленочка тм
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel (VBA) Сводные таблицы. Создание. Обновление.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]