Страницы: 1
RSS
Сводная таблица из нескольких листов с помощью подключений
 
Здравствуйте, подскажите в чем может быть причина, не работает макрос, вот он ругается на, до этого делал, каким то образом все получилось, щас не хочет ни в какую, сам файл прислать не могу, так как он весит около 20 мб, Заранее спасибо)) он создает новый файл, там же где и лежит этот, по идее должен его удалить, но такого не происходит
Код
ThisWorkbook.PivotCaches(1).Connection = sCon
Код
'---------------------------------------------------------------------------------------
' 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





 
Цитата
denka1982 написал: вот он ругается на
На ЧТО? Как?
Согласие есть продукт при полном непротивлении сторон
 
запускаю макрос. и эта строчка загорается желтым, на работе целый день бился, как то смог это убрать, потом что то поменял, и по новой этот же глюк
я на сколько понимаю надо что то с подключениями ваять?, хотя в принципе он работает по отдельности от моего файла
 
1. Название темы ни о чем. Вам надо придумать название согласно правил форума и предложить в новом сообщении. Иначе тема на удаление.
2. Какую ошибку пишет?
Изменено: Дмитрий Щербаков - 06.03.2018 20:13:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
с той проблемой разобрался, там почему то не отображалась таблица, но контуры были видны, при нажатии на них выявился конструктор сводной, в общем тут порядок, теперь не выходит добавить страницы, пишет недостаточно параметров, необходимо 11.  название темы, сводная таблица из нескольких листов с помощью подключений
Изменено: denka1982 - 06.03.2018 21:47:19
 
ошибка такая
Код
Set oPT = .CreatePivotTable(rRes(3, 1))

вот скрины ошибка,

названия сто процентов правильные, я их изначально отсюда брал

сам файл

Изменено: denka1982 - 06.03.2018 23:12:25 (дополнение)
 
Уберите пустые столбцы из листов План и Факт. Или заполните их чем угодно, главное, чтобы наименования столбцов были уникальными и не пустыми.
Изменено: Дмитрий Щербаков - 07.03.2018 09:40:01
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
с листами факт и план проблем нет, проблема появляется если туда вписать другое название листа, например определение кислотности, или определение жира, сразу пишет ошибку недостаточно параметров, столбцы тут ни при чем, в плане то все работает и в факте
 
Цитата
denka1982 написал:
если туда вписать другое название листа
Так надо такой пример и выкладывать, на котором ошибка появляется. Выкладываете рабочий пример и предлагаете посидеть и поугадывать что надо сделать, чтобы не работало?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
так там и есть ошибка, работает только два листа план и факт, остальные вообще не хотят работать, хотя там все идентично, если не считать конечно как остальные листы там появились.
 
Цитата
denka1982 написал:
так там и есть ошибка
я запустил приложенный файл - нет ошибки. Что теперь делать? Угадывать какое имя листа Вы еще вписали? И кому это надо, если Вы сами не хотите этого написать? Особенно учитывая, что там этих листов 47 штук
Цитата
denka1982 написал:
остальные вообще не хотят работать, хотя там все идентично
Открыл лист "Прейскурант" - ни разу не идентично. На листе "- определение жира " - нет столбца Сумма. Да и на многих листах нет этого столбца, включая лист "- определение общей кислотности". Лист "- определение жира (Сокс)" - вообще пустой. И что делать будем, как угадывать чего Вы там где указали?
Либо допишите во всех листах для сбора столбец Сумма, либо уберите его из запроса:
sCols = "[код пробы],[дата],[Наименование поступившего материала],[Наименование исследований],[Результаты исследования],[Погрешность измерения],[Дата исследования],[Сотрудник, выполнивший исследование],[Подпись],[Примечание],[Сумма]"
Изменено: Дмитрий Щербаков - 07.03.2018 14:42:13
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий Щербаков написал:
Открыл лист "Прейскурант" - ни разу не идентично. На листе "- определение жира " - нет столбца Сумма. Да и на многих листах нет этого столбца, включая лист "- определение общей кислотности". Лист "- определение жира (Сокс)" - вообще пустой. И что делать будем, как угадывать чего Вы там где указали?Либо допишите во всех листах для сбора столбец Сумма, либо уберите его из запроса:sCols = "[код пробы],[дата],[Наименование поступившего материала],[Наименование исследований],[Результаты исследования],[Погрешность измерения],[Дата исследования],[Сотрудник, выполнивший исследование],[Подпись],[Примечание],[Сумма]"
попробую, щас рабочий день закончился, отпишусь что вышло, я пытался сделать только с листом определение кислотности, которая в самом начале файла, по вкладкам, остальные я листы не трогал, так как надо понять принцип работы макроса не общей кислотности, а просто кислотности!!!
Изменено: denka1982 - 07.03.2018 15:29:36
 
Вернитесь и  приведите сообщение в порядок. Вы знаете, что такое "цитата"? Когда и заче нужно цитировать?
 
Цитата
denka1982 написал:
вписать другое название листа, например определение кислотности
Цитата
denka1982 написал:
а просто кислотности!!!
Покажите мне в своем файле лист, который называется "определение кислотности". Просто, не общей. В файле есть листы:
1. кислотность
2. -определение кислотного числа
3. - определение общей кислотности

Поэтому восклицательные знаки в Вашем предложении лишние - как объясняете, такие ответы и получаете.
На листе "кислотность" заголовок записан во второй строке, а должен быть в первой. Отсюда и ошибка. Если, конечно, речь про лист "кислотность", а не еще какой-то :)
Изменено: Дмитрий Щербаков - 07.03.2018 16:01:55
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, оказалось что все столбцы были записаны во второй строчке, а первая скрыта была.
Страницы: 1
Читают тему
Наверх