Доброго времени суток. Суть проблемы такова, я нашел макрос, который формирует сводник из вкладок указанных в [vba]
Код
SheetsNames = Array("a1", "a2", "a3", "a4")
[/vba] У меня вопрос ,можно ли как то кастомизировать момент выбора вкладок? Предполагается три вида вкладок a1-a140,b1-b140,c1-c140 - то есть всего 460 вкладок, ориентироваться в них будет достаточно тяжело. Возможные варианты выбора вкладок для формирования отчета: 1.По всем вкладкам 2.По вкладкам a1-a20, b1-b30,c1-c20 Буду признателен за любые предложения.
Полный код [vba]
Код
Sub Pivot_table_s() Dim i As Long Dim arSQL() As String Dim objPivotCache As PivotCache Dim objRS As Object Dim ResultSheetName As String Dim SheetsNames As Variant 'On Error Resume Next
'имя листа, куда будет выводиться результирующая сводная ResultSheetName = "Сводная" 'массив имен листов с исходными таблицами SheetsNames = Array("a1", "a2", "a3", "a4")
'формируем кэш по таблицам с листов из SheetsNames With ActiveWorkbook ReDim arSQL(1 To (UBound(SheetsNames) + 1)) For i = LBound(SheetsNames) To UBound(SheetsNames) arSQL(i + 1) = "SELECT * FROM [" & SheetsNames(i) & "$]" Next i Set objRS = CreateObject("ADODB.Recordset") objRS.Open Join$(arSQL, " UNION ALL "), _ Join$(Array("Provider=Microsoft.Ace.OLEDB.12.0; Data Source=", _ .FullName, ";Extended Properties=""Excel 8.0;"""), vbNullString) End With
'создаем заново лист для вывода результирующей сводной таблицы 'On Error Resume Next Application.DisplayAlerts = False 'Worksheets(ResultSheetName).Delete Set wsPivot = Worksheets.Add wsPivot.Name = ResultSheetName
'выводим на этот лист сводную по сформированному кэшу Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal) Set objPivotCache.Recordset = objRS Set objRS = Nothing With wsPivot objPivotCache.CreatePivotTable TableDestination:=wsPivot.Range("A3") Set objPivotCache = Nothing Range("A3").Select
End With
End Sub
[/vba]
Доброго времени суток. Суть проблемы такова, я нашел макрос, который формирует сводник из вкладок указанных в [vba]
Код
SheetsNames = Array("a1", "a2", "a3", "a4")
[/vba] У меня вопрос ,можно ли как то кастомизировать момент выбора вкладок? Предполагается три вида вкладок a1-a140,b1-b140,c1-c140 - то есть всего 460 вкладок, ориентироваться в них будет достаточно тяжело. Возможные варианты выбора вкладок для формирования отчета: 1.По всем вкладкам 2.По вкладкам a1-a20, b1-b30,c1-c20 Буду признателен за любые предложения.
Полный код [vba]
Код
Sub Pivot_table_s() Dim i As Long Dim arSQL() As String Dim objPivotCache As PivotCache Dim objRS As Object Dim ResultSheetName As String Dim SheetsNames As Variant 'On Error Resume Next
'имя листа, куда будет выводиться результирующая сводная ResultSheetName = "Сводная" 'массив имен листов с исходными таблицами SheetsNames = Array("a1", "a2", "a3", "a4")
'формируем кэш по таблицам с листов из SheetsNames With ActiveWorkbook ReDim arSQL(1 To (UBound(SheetsNames) + 1)) For i = LBound(SheetsNames) To UBound(SheetsNames) arSQL(i + 1) = "SELECT * FROM [" & SheetsNames(i) & "$]" Next i Set objRS = CreateObject("ADODB.Recordset") objRS.Open Join$(arSQL, " UNION ALL "), _ Join$(Array("Provider=Microsoft.Ace.OLEDB.12.0; Data Source=", _ .FullName, ";Extended Properties=""Excel 8.0;"""), vbNullString) End With
'создаем заново лист для вывода результирующей сводной таблицы 'On Error Resume Next Application.DisplayAlerts = False 'Worksheets(ResultSheetName).Delete Set wsPivot = Worksheets.Add wsPivot.Name = ResultSheetName
'выводим на этот лист сводную по сформированному кэшу Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal) Set objPivotCache.Recordset = objRS Set objRS = Nothing With wsPivot objPivotCache.CreatePivotTable TableDestination:=wsPivot.Range("A3") Set objPivotCache = Nothing Range("A3").Select
Dim s As String 'Ввод массива имен листов с исходными таблицами s = InputBox("Имена листов через запятую") s = Replace(s, ", ", ",") 'Удаляем возможные пробелы после запятой SheetsNames = Split(s, ",")
Dim s As String 'Ввод массива имен листов с исходными таблицами s = InputBox("Имена листов через запятую") s = Replace(s, ", ", ",") 'Удаляем возможные пробелы после запятой SheetsNames = Split(s, ",")
Большое спасибо за советы. Но к сожалению возникла огромная проблема, при добавлении всего 60 вкладок с данными, получаю ошибку "Слишком сложный запрос". У кого нибудь есть идеи как обойти эту ошибку?
Большое спасибо за советы. Но к сожалению возникла огромная проблема, при добавлении всего 60 вкладок с данными, получаю ошибку "Слишком сложный запрос". У кого нибудь есть идеи как обойти эту ошибку? thrasher
Спасибо за ответ, оказалось проще сформировать со всех этих вкладок одну большую простыню и получить приличный сводник. адов дб - слишком сложный запрос
Спасибо за ответ, оказалось проще сформировать со всех этих вкладок одну большую простыню и получить приличный сводник. адов дб - слишком сложный запрос thrasher