Страница: 1 |
Вопрос: знатоки!!! проверьте, плз, код на массив. | Добавлено: 04.09.02 19:08 |
Автор вопроса: ![]() |
Sub Макрос1() Dim Worksheet As Worksheet Dim textRng As String Dim ArrForTab() As Variant ' пробовал String , Range n = 0 For Each Worksheet In ThisWorkbook.Worksheets If Worksheet.Name <> "сводная" Then textRng = "'" & Worksheet.Name & "'!" & Worksheet.Range("a1:b5").Address(ReferenceStyle:=xlR) n = n + 1 ReDim ArrForTab(n) ArrForTab(n) = textRng End If Next Worksheet ThisWorkbook.Worksheets("сводная").Cells.Select Selection.Delete Shift:=xlUp ThisWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, SourceData:= Array(ArrForTab)).CreatePivotTable TableDestination:="[Книга1.xls]сводная!R3C1", TableName:="свод" 'ThisWorkbook.Worksheets("сводная").PivotTableWizard 'SourceType:=xlConsolidation, SourceData:=Array(ArrForTab), 'RowGrand:=True, ColumnGrand:=False 'почему-то не работает ссылка на массив ArrForTab. Хотя, если записать все полученные результаты "ручками": ' ThisWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, SourceData:= ' Array("Лист1!R1C1:R5C2", "Лист2!R1C1:R5C2", "Лист3!R1C1:R5C2")).CreatePivotTable TableDestination:="[Книга1.xls]сводная!R3C1", TableName:="свод" 'то все получается. End Sub |
Ответы | Всего ответов: 3 |
Номер ответа: 1 Автор ответа: ![]() ![]() ICQ: 155153916 Вопросов: 2 Ответов: 126 |
Профиль | Цитата | #1 | Добавлено: 05.09.02 09:00 |
1. В чем проблема? 2. чего ты хочеш, чтобы этот код делал? может в нем и ни одной строчки не верно! |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 9 Ответов: 84 |
Профиль | Цитата | #2 | Добавлено: 05.09.02 09:06 |
Option Base 1 Sub Макрос() Dim Worksheet As Worksheet Dim textRng As String Dim ArrForTab() As String n = 0 For Each Worksheet In ThisWorkbook.Worksheets If Worksheet.Name <> "сводная" Then textRng = "'" & Worksheet.Name & "'!" & Worksheet.Range("a1:b5").Address(ReferenceStyle:=xlR) n = n + 1 ReDim Preserve ArrForTab(n) ArrForTab(n) = textRng End If Next Worksheet Видишь в чем ошибки? Во-первых, вверху в области Declaration напиши Option Base 1, иначе в массиве будет пустой первый элемент ArrForTab(0) Во-вторых, просто ReDim ArrForTab(n) каждый раз заново переопределяет массив большего размера, убивая предыдущие элементы. Если при объявлении массива не знаешь заранее его верхней границы, то тогда ReDim Preserve ArrForTab(n). А у тебя на выходе цикла был пустой массив. Кстати, есть же для отладки Watch Window, там весь массив как на ладони. Удачи! |
Номер ответа: 3 Автор ответа: ![]() ![]() Вопросов: 1 Ответов: 1 |
Профиль | Цитата | #3 | Добавлено: 05.09.02 10:54 |
Спасибо за науку!!! А код (полный) должен делать следующее: Есть неопределенное количество таблиц с постоянно изменяющимся количеством строк. На основании их делаются сводные таблицы, и потом делается результирующая сводная. Теоретически решил - практически знаний не хватило. Честно говоря, не ожидал, что будет СТОЛЬКО нюансов. Еще раз спасибо! Алексей. |
Страница: 1 |
|