Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: знатоки!!! проверьте, плз, код на массив. Добавлено: 04.09.02 19:08  

Автор вопроса:  allexey

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
Автор ответа:
 SAVok



ICQ: 155153916 

Вопросов: 2
Ответов: 126
 Профиль | | #1 Добавлено: 05.09.02 09:00

1. В чем проблема?

2. чего ты хочеш, чтобы этот код делал? может в нем и ни одной строчки не верно!

Ответить

Номер ответа: 2
Автор ответа:
 Petrovich



Вопросов: 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
Автор ответа:
 allexey



Вопросов: 1
Ответов: 1
 Профиль | | #3 Добавлено: 05.09.02 10:54

Спасибо за науку!!!

А код (полный) должен делать следующее:

Есть неопределенное количество таблиц с постоянно изменяющимся количеством строк. На основании их делаются сводные таблицы, и потом делается результирующая сводная. Теоретически решил - практически знаний не хватило. Честно говоря, не ожидал, что будет СТОЛЬКО нюансов.

Еще раз спасибо!

Алексей.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам