С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 4

Корректировка макроса сводных таблиц

18.09.2015, 14:41. Показов 1655. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, качнула готовый макрос для создания сводной таблицы из нескольких листов. внесла свои корректировки и получила ошибку 1004 [Microsoft][Драйвер ODBS Excel] Слишком мало параметров. Требуется 5. После нажатия кнопки "Debug" меня отправляет в макрос исправлять строку "Set oPT = .CreatePivotTable(rRes(3, 1))" (предпоследняя строка перед фразой " 'теперь изменяем в запросе сводной путь к файлу на текущий")


макрос с комментариями создателя ниже:
Visual Basic
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
'---------------------------------------------------------------------------------------
' Module    : mPTFromMultipleSheets
' DateTime  : 07.08.2014 21:43
' Author    : The_Prist(Щербаков Дмитрий)
'             http://www.excel-vba.ru
' Purpose   : Процедура создания сводной таблицы из нескольких листов
'             http://www.excel-vba.ru/chto-umeet-excel/svodnaya-tablica-iz-neskolkix-listov/
'---------------------------------------------------------------------------------------
Option Explicit
 
Sub PTFromMultipleSheets()
    Dim oPTCache As PivotCache, oPT As PivotTable
    Dim sPath As String, sWbFulName As String, sTmpFileName As String
    Dim avSheets
    Dim sCols As String, sQuery As String, sCon As String
    Dim rRes As Range
    Dim li As Long
 
    sPath = ThisWorkbook.Path
    sWbFulName = ThisWorkbook.FullName
    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
    sTmpFileName = sPath & "TempWbForDB_" & Format(Now, "yyyymmddhhmmss") & ".xls"
    'сюда можно добавить еще листы
    avSheets = Array("Шампунь Ашан крапива", "Шампунь Ашан ромашка", "Шампунь Ашан календула") 'например: Array("Январь", "Февраль", "Март", "Апрель")
    'ниже перечисляются заголовки столбцов, на основе которых строится сводная
    'столбцы могут быть в разном порядке, но иметь одинаковые заголовки
    sCols = "[Дата замеса],[Наименование замеса],[Количество замеса, кг],[Фактический выход замеса, кг],[Разница между замесом и выходом готовой продукции, кг]"
    'sCols = "*" ' - если необходимо включить все столбцы
    'при этом шапка на всех листах должна быть полностью одинаковая, кол-во столбцов одинаковое
    'данные будут в том порядке, в котором расположены столбцы
    
    Application.ScreenUpdating = False
    If Val(Application.Version) > 11 Then DelCon
    Set rRes = ThisWorkbook.Sheets(1).Cells
    rRes.Clear
    ThisWorkbook.Worksheets(avSheets).Copy
    With ActiveWorkbook
        .SaveAs sTmpFileName
        .Close
    End With
    'создаем строку запроса
    For li = LBound(avSheets) To UBound(avSheets)
        If li > 0 Then
            sQuery = sQuery & " UNION SELECT " & sCols & " FROM [" & avSheets(li) & "$]"
        Else
            sQuery = "SELECT " & sCols & " FROM [" & avSheets(li) & "$]"
        End If
    Next li
    'сначала создаем подключение к временному файлу
    'это поможет избежать ошибок подключения к открытому файлу
    sCon = _
    "ODBC;DSN=Excel Files;DBQ=" & sTmpFileName & ";" & _
           "DefaultDir=" & sPath & ";DriverId=790;" & _
           "MaxBufferSize=2048;PageTimeout=5"
 
    Set oPTCache = ThisWorkbook.PivotCaches.Add(SourceType:=xlExternal)
    With oPTCache
        .Connection = sCon
        .CommandType = xlCmdSql
        .CommandText = sQuery
    Set oPT = .CreatePivotTable(rRes(3, 1))
    End With
    'теперь изменяем в запросе сводной путь к файлу на текущий
    sCon = _
    "ODBC;DSN=Excel Files;DBQ=" & sWbFulName & ";" & _
           "DefaultDir=" & sPath & ";DriverId=790;" & _
           "MaxBufferSize=2048;PageTimeout=5"
    ThisWorkbook.PivotCaches(1).Connection = sCon
 
    With oPT
        'выставляем первоначальные настройки для сводной
        With .PivotFields(1)
            .Orientation = xlRowField
            .Position = 1
        End With
        With .PivotFields(2)
            .Orientation = xlRowField
            .Position = 2
        End With
        .AddDataField .PivotFields("Сумма"), "Сумма по полю Сумма", xlSum
    End With
 
    'удаляем временный файл
    Kill sTmpFileName
    Set oPT = Nothing: Set oPTCache = Nothing
    Application.ScreenUpdating = True
End Sub
'---------------------------------------------------------------------------------------
' Procedure : DelCon
' Purpose   : Процедура удаляет подключения
'             Требуется только для версий, выше 2003
'---------------------------------------------------------------------------------------
Private Sub DelCon()
    On Error Resume Next: ThisWorkbook.Connections(1).Delete: On Error GoTo 0
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2015, 14:41
Ответы с готовыми решениями:

Создание сводных таблиц
Помогите!! Целый день сегодня убила, пытаясь вспомнить хоть что-то из VBA. Это вырезка из моего кода по созданию сводной таблицы. ...

Расширение возможностей сводных таблиц
Итак, идея проста: мне необходимо добавить в стандартную сводную таблицу в область &quot;Фильтр отсчета&quot; несколько одинаковых полей,...

Корректировка макроса
В общем суть такова: Я хотел написать макрос который по выделенным ячейкам должен отмечать цветом первую ячейку пары с противоположным...

4
 Аватар для Alex_Gur
47 / 47 / 6
Регистрация: 28.04.2015
Сообщений: 160
Записей в блоге: 4
18.09.2015, 15:03
Советую Вам обратиться к автору макроса, который консультирует на сайте, указанном в начале Вашего макроса.
0
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 4
18.09.2015, 17:43  [ТС]
Дело в том, что он не отвечает на мое сообщение целый день. А мой пытливый ум не может ждать долго, ведь интересно же, почему не получается...
0
 Аватар для Alex_Gur
47 / 47 / 6
Регистрация: 28.04.2015
Сообщений: 160
Записей в блоге: 4
18.09.2015, 17:45
Цитата Сообщение от Ксюташа Посмотреть сообщение
Дело в том, что он не отвечает на мое сообщение целый день. А мой пытливый ум не может ждать долго, ведь интересно же, почему не получается...
А Вы не там задали вопрос. К сожалению, я не имею права на этом форуме указывать адрес другого форума. Задавать ему вопрос нужно на форуме.
0
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 4
18.09.2015, 17:50  [ТС]
ок, попытаюсь его найти сама. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2015, 17:50
Помогаю со студенческими работами здесь

Исправление макроса заполнения БД Access из таблиц Excel
Добрый день! Я не программист, а экономист. Один добрый человек написал нам макрос, который загружает данные из подготовленных идентичных...

Обновление сводных таблиц
Всех приветствую! Возникла потребность в автообновлении всех сводных таблиц, располагающихся на разных листах в одном файле. Прошу...

Мастер сводных таблиц excel
&quot;1. По данным приведенной ниже таблицы с помощью мастера сводных таблиц создайте сводную таблицу, разместив ее на новом листе с...

Нужна помощь по созданию сводных таблиц
Задача: Создается ведомость =&gt; передается шапка ведомости 21 клиенту (по эл. почте) =&gt; клиенты заполняют таблицу и передают назад. ...

Изменить макрос для обновления сводных таблиц
Привет! Срочно нужна помощь! У меня был Excel файл, в котором все сводные таблицы были на 1 листе (&quot;Регионы&quot;) Сводные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru