Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2012, 10:05   #1
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию Сводная таблица из нескольких листов

Здравствуйте, столкнулся с небольшой проблемой при реализации сводной таблицы из нескольких листов.
Начальные навыки программирования есть, и логику понимаю, но с Visual basic сталкиваюсь впервые, поэтому и возникли некоторые сложности.

Итак, задача: имеется несколько листов с однородными данными, количество листов периодически добавляется.
Шаблон находится здесь: http://rghost.ru/37869477

В этой же книге есть сводный лист, где содержится краткая информация из каждого листа - наименование, дата, план.

Как понимаю, проще на сводном листе сделать кнопку "обновить", чтобы по нажатию на ней выводились некоторые ячейки из всех остальных листов. В принципе, на "сводном листе" в книге по ссылке выше указано, что хотелось бы получить

Главный вопрос - как это реализовать?

Форум немного почитал, ответа не нашел. Консолидация данных тоже не подходит - выводит вместо текстовых значений единицу.
4uvak111 вне форума Ответить с цитированием
Старый 02.05.2012, 11:22   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

попробуйте так
Код:
Sub ertert()
Dim x, y(), wsh As Worksheet, i As Long
ReDim y(1 To ThisWorkbook.Worksheets.Count - 1, 1 To 4)

For Each wsh In ThisWorkbook.Worksheets
    If Not wsh Is ActiveSheet Then
        x = wsh.Range("B2:D10").Value
        i = i + 1
        y(i, 1) = i
        y(i, 2) = x(1, 3)
        y(i, 3) = x(7, 3)
        y(i, 4) = x(9, 3)
    End If
Next wsh
Range("A2:D" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
[a2:d2].Resize(i).Value = y
End Sub
Вложения
Тип файла: zip Книга2.zip (35.5 Кб, 58 просмотров)
nilem вне форума Ответить с цитированием
Старый 02.05.2012, 12:02   #3
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

nilem, отлично, как раз то что нужно!
Только что исправить в макросе, чтобы дату вставляло не из ячейки d8, а из с10?

И еще, можно ли макросом создавать для каждой строки кнопку, которая будет открывать тот лист, из которого берутся данные для этой строки?
4uvak111 вне форума Ответить с цитированием
Старый 02.05.2012, 12:37   #4
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Наверное, лучше гиперссылки вместо кнопок. Вот так попробуйте
Код:
Sub ertert()
Dim x, y(), wsh As Worksheet, i As Long, r As Range
ReDim y(1 To ThisWorkbook.Worksheets.Count - 1, 1 To 5)

For Each wsh In ThisWorkbook.Worksheets
    If Not wsh Is ActiveSheet Then
        x = wsh.Range("B2:D10").Value
        i = i + 1: y(i, 1) = i: y(i, 2) = x(1, 3)
        y(i, 3) = x(9, 2): y(i, 4) = x(9, 3): y(i, 5) = wsh.Name
    End If
Next wsh
Range("A2:E" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
[a2:e2].Resize(i).Value = y
For Each r In [e2].Resize(i)
    r.Hyperlinks.Add anchor:=r, Address:="", SubAddress:="'" & r.Value & "'" & "!B2"
Next r
End Sub
nilem вне форума Ответить с цитированием
Старый 02.05.2012, 13:19   #5
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

nilem, спасибо огромное, очень помогло!

Кстати, еще вопрос. Вставка листа выполняется с помощью макроса
Код:
Sub ВставкаЛиста()
'
' ВставкаЛиста Макрос
'
    Sheets("Сводный лист").Select
    Sheets.Add Type:= _
        "C:\Users\Администратор\AppData\Roaming\Microsoft\Шаблоны\Лист.xltm"
End Sub
Но шаблон листа вставляется всегда в начало книги. Что нужно сделать, чтобы новый шаблон листа всегда вставлялся вторым, сразу после "Сводного листа"?
4uvak111 вне форума Ответить с цитированием
Старый 02.05.2012, 13:35   #6
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Так и пишем: сразу после "Сводного листа"

Код:
Sheets.Add After:=Sheets("Сводный лист"), Type:=...
nilem вне форума Ответить с цитированием
Старый 02.05.2012, 18:06   #7
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

nilem, вновь выручаешь! Спасибо!
И еще вопрос, как правильно сделать так, чтобы вместо "Администратора" в пути подставлялся текущий пользователь? Или может быть можно как то реорганизовать книгу, чтобы она безболезненно работала на разных ПК?
В данный момент, придется всем пользователям сохранить шаблон листа в соответствующей папке.

Кстати, на 2010 все работало отлично, а вот на 2007 офисе не взлетело. 2007 офис пытался вместо файла Лист.xtlm найти Лист1.xtml, потом Лист11.xtml...
4uvak111 вне форума Ответить с цитированием
Старый 02.05.2012, 19:40   #8
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Имхо, лучше хранить шаблон в самой книге в виде скрытого листа. Тогда вставить новый лист можно как-то так:
Код:
Sub InsSheet()
With Sheets("шаблон")
    .Visible = xlSheetVisible
    .Copy After:=Sheets("Сводный лист")
    .Visible = xlSheetHidden
End With
ActiveSheet.Name = "орг-ция" & ThisWorkbook.Worksheets.Count
End Sub
А в предыдущем коде нужно подправить:
Код:
Sub ertert()
.....
For Each wsh In ThisWorkbook.Worksheets
    If Not wsh Is ActiveSheet Then
        If Not wsh.Name = "шаблон" Then
            ...........
        End If
    End If
Next wsh
.......
nilem вне форума Ответить с цитированием
Старый 02.05.2012, 21:37   #9
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

nilem, блин, как классно, когда все работает... Примного тебе благодарен!
4uvak111 вне форума Ответить с цитированием
Старый 03.05.2012, 07:07   #10
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

Такс, пожалуй последнее исправление, которое придется внести - это чтобы с планом выводился и отчет, в таком же порядке как и на всех остальных листах, т.е. на сводном получится №, наименование, дата отчета, отчет, ссылка на лист - в первой строке, а во второй - дата плана, план.
4uvak111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сводная таблица на основе нескольких листов ElenaTro Microsoft Office Excel 3 25.07.2011 23:47
Сводная таблица с двух листов не выводит нужные данные kipish_lp Microsoft Office Excel 2 26.04.2010 12:46
Сводная таблица путем объединения нескольких диапазонов ЛесяЛ Microsoft Office Excel 1 10.01.2010 22:54
Сводная таблица mihakr Microsoft Office Excel 6 10.04.2009 14:00
Сводная таблица Галина Microsoft Office Excel 3 01.11.2007 20:01