Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Sheets array - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Sheets array (Макросы/Sub)
Sheets array
thrasher Дата: Воскресенье, 26.04.2015, 13:54 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброго времени суток.
Суть проблемы такова, я нашел макрос, который формирует сводник из вкладок указанных в
[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
          
     End With
   
   
   
   
End Sub
[/vba]

Автор - thrasher
Дата добавления - 26.04.2015 в 13:54
Skif-F Дата: Воскресенье, 26.04.2015, 16:42 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Решение "в лоб".
Заменить:
[vba]
Код

'массив имен листов с исходными таблицами
SheetsNames = Array("a1", "a2", "a3", "a4")
[/vba]
на:
[vba]
Код

Dim s As String
'Ввод массива имен листов с исходными таблицами
s = InputBox("Имена листов через запятую")
s = Replace(s, ", ", ",")  'Удаляем возможные пробелы после запятой
SheetsNames = Split(s, ",")
[/vba]
 
Ответить
СообщениеРешение "в лоб".
Заменить:
[vba]
Код

'массив имен листов с исходными таблицами
SheetsNames = Array("a1", "a2", "a3", "a4")
[/vba]
на:
[vba]
Код

Dim s As String
'Ввод массива имен листов с исходными таблицами
s = InputBox("Имена листов через запятую")
s = Replace(s, ", ", ",")  'Удаляем возможные пробелы после запятой
SheetsNames = Split(s, ",")
[/vba]

Автор - Skif-F
Дата добавления - 26.04.2015 в 16:42
Hugo Дата: Воскресенье, 26.04.2015, 17:03 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Может вывести листбокс с мультивыбором? Нехай юзер кликает.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеМожет вывести листбокс с мультивыбором? Нехай юзер кликает.

Автор - Hugo
Дата добавления - 26.04.2015 в 17:03
thrasher Дата: Среда, 29.04.2015, 23:30 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Большое спасибо за советы. Но к сожалению возникла огромная проблема, при добавлении всего 60 вкладок с данными, получаю ошибку "Слишком сложный запрос". У кого нибудь есть идеи как обойти эту ошибку? :(
 
Ответить
СообщениеБольшое спасибо за советы. Но к сожалению возникла огромная проблема, при добавлении всего 60 вкладок с данными, получаю ошибку "Слишком сложный запрос". У кого нибудь есть идеи как обойти эту ошибку? :(

Автор - thrasher
Дата добавления - 29.04.2015 в 23:30
thrasher Дата: Вторник, 05.05.2015, 20:19 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо за ответ, оказалось проще сформировать со всех этих вкладок одну большую простыню и получить приличный сводник. адов дб - слишком сложный запрос %)
 
Ответить
СообщениеСпасибо за ответ, оказалось проще сформировать со всех этих вкладок одну большую простыню и получить приличный сводник. адов дб - слишком сложный запрос %)

Автор - thrasher
Дата добавления - 05.05.2015 в 20:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Sheets array (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!