Страница: 1 |
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
1. В чем проблема? 2. чего ты хочеш, чтобы этот код делал? может в нем и ни одной строчки не верно! 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, там весь массив как на ладони. Удачи! Спасибо за науку!!! А код (полный) должен делать следующее: Есть неопределенное количество таблиц с постоянно изменяющимся количеством строк. На основании их делаются сводные таблицы, и потом делается результирующая сводная. Теоретически решил - практически знаний не хватило. Честно говоря, не ожидал, что будет СТОЛЬКО нюансов. Еще раз спасибо! Алексей. Страница: 1 |
Вопрос: знатоки!!! проверьте, плз, код на массив.
Добавлено: 04.09.02 19:08
Автор вопроса: allexey
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
SAVok
ICQ: 155153916
Вопросов: 2
Ответов: 126
Профиль | | #1
Добавлено: 05.09.02 09:00
Номер ответа: 2
Автор ответа:
Petrovich
Вопросов: 9
Ответов: 84
Профиль | | #2
Добавлено: 05.09.02 09:06
Номер ответа: 3
Автор ответа:
allexey
Вопросов: 1
Ответов: 1
Профиль | | #3
Добавлено: 05.09.02 10:54