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

Вход

Регистрация

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

 

= Мир MS Excel/Скрыть строки в книге в зависимости от выбора на листе 1 - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скрыть строки в книге в зависимости от выбора на листе 1 (Формулы/Formulas)
Скрыть строки в книге в зависимости от выбора на листе 1
SDrake Дата: Среда, 21.09.2016, 07:53 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!
Возникла проблема при подготовке книги excel. На первом листе есть выбор из списка (допустим "книга 1" или "книга 2").
В зависимости от этого выбора на всех прочих листах должно быть показано разное содержимое.
Например, если выбрана "книга 1", то на листе 2 должны быть строки 1, 2, 3, 4, 5.
Если выбрана "книга 2", то должны быть строки 1, 2, 3, 4, 5, 6, 7, 8.

До определённого момента я пробовал вставлять в каждый лист следующий макрос:
[vba]
Код
Private Sub Worksheet_Calculate()
If [A1] = 1 Then
Rows(95).EntireRow.Hidden = True
Rows(96).EntireRow.Hidden = True
Rows(97).EntireRow.Hidden = True
Rows(98).EntireRow.Hidden = True
Rows(99).EntireRow.Hidden = True
Else
Rows(95).EntireRow.Hidden = False
Rows(96).EntireRow.Hidden = False
Rows(97).EntireRow.Hidden = False
Rows(98).EntireRow.Hidden = False
Rows(99).EntireRow.Hidden = False
End If
End Sub
[/vba]

В ячейке А1 формула: Если "Книга 1" то 1, иначе 2.

Однако на определённом листе и последующих, стала выскакивать ошибка: то "Run-time error 28" то ещё какая-нибудь и программа зависает.
Погуглив немного, понял, что вроде сильно много вычислений или что-то типа того.

ВОПРОС:
Как можно решить эту проблему? Есть ли более простой способ скрывать строки? Можно ли без макросов решить подобную задачу?

[p.s.]Поиск по форуму не привёл к решению проблемы. Код взял тоже где-то на форуме, сам не шарю вообще. Возможно даже не там тему создал. Файл приложить не могу - сильно большой/секретный )[/p.s.]


Сообщение отредактировал SDrake - Среда, 21.09.2016, 08:03
 
Ответить
СообщениеДобрый день!
Возникла проблема при подготовке книги excel. На первом листе есть выбор из списка (допустим "книга 1" или "книга 2").
В зависимости от этого выбора на всех прочих листах должно быть показано разное содержимое.
Например, если выбрана "книга 1", то на листе 2 должны быть строки 1, 2, 3, 4, 5.
Если выбрана "книга 2", то должны быть строки 1, 2, 3, 4, 5, 6, 7, 8.

До определённого момента я пробовал вставлять в каждый лист следующий макрос:
[vba]
Код
Private Sub Worksheet_Calculate()
If [A1] = 1 Then
Rows(95).EntireRow.Hidden = True
Rows(96).EntireRow.Hidden = True
Rows(97).EntireRow.Hidden = True
Rows(98).EntireRow.Hidden = True
Rows(99).EntireRow.Hidden = True
Else
Rows(95).EntireRow.Hidden = False
Rows(96).EntireRow.Hidden = False
Rows(97).EntireRow.Hidden = False
Rows(98).EntireRow.Hidden = False
Rows(99).EntireRow.Hidden = False
End If
End Sub
[/vba]

В ячейке А1 формула: Если "Книга 1" то 1, иначе 2.

Однако на определённом листе и последующих, стала выскакивать ошибка: то "Run-time error 28" то ещё какая-нибудь и программа зависает.
Погуглив немного, понял, что вроде сильно много вычислений или что-то типа того.

ВОПРОС:
Как можно решить эту проблему? Есть ли более простой способ скрывать строки? Можно ли без макросов решить подобную задачу?

[p.s.]Поиск по форуму не привёл к решению проблемы. Код взял тоже где-то на форуме, сам не шарю вообще. Возможно даже не там тему создал. Файл приложить не могу - сильно большой/секретный )[/p.s.]

Автор - SDrake
Дата добавления - 21.09.2016 в 07:53
Pelena Дата: Среда, 21.09.2016, 08:35 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9890
Репутация: 2269 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Здравствуйте.
Почему именно Worksheet_Calculate? Может, другое событие использовать?
Например, при изменении ячейки со списком пробежаться макросом по всем листам и скрыть/отобразить строки.


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Почему именно Worksheet_Calculate? Может, другое событие использовать?
Например, при изменении ячейки со списком пробежаться макросом по всем листам и скрыть/отобразить строки.

Автор - Pelena
Дата добавления - 21.09.2016 в 08:35
SDrake Дата: Среда, 21.09.2016, 09:10 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Это единственный сработавший код, из всех, что я нашёл в темах по подобному вопросу. Буду благодарен, если подскажете более правильное/простое решение.
 
Ответить
СообщениеЭто единственный сработавший код, из всех, что я нашёл в темах по подобному вопросу. Буду благодарен, если подскажете более правильное/простое решение.

Автор - SDrake
Дата добавления - 21.09.2016 в 09:10
_Boroda_ Дата: Среда, 21.09.2016, 09:15 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Чтобы решение было оптимальным, а не просто перебор строк, нужен Ваш файл. Причем именно в таком формате, как описано в п.3 Правил форума (строк можно и побольше). И желательно пояснение причин скрытия-открытия именно этих строк на каждом из листов.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЧтобы решение было оптимальным, а не просто перебор строк, нужен Ваш файл. Причем именно в таком формате, как описано в п.3 Правил форума (строк можно и побольше). И желательно пояснение причин скрытия-открытия именно этих строк на каждом из листов.

Автор - _Boroda_
Дата добавления - 21.09.2016 в 09:15
SDrake Дата: Среда, 21.09.2016, 13:06 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Сделал мини-версию файла в качестве примера. А в нём:

На первом листе (Главное меню) нужно выбрать версию справочника: Физика или Физика+Оптика

Если выбрана Физика+Оптика, то на втором листе (Стр.1) отображена полная таблица цветов с Красного по Коричневый, т.е. строки с 1 по 13.

Однако если выбрана Физика, то в таблице должны отображаться строки 1-10, т.е. цвета с Красного по Фиолетовый.

Примерно такую же задачу я пытался решить при помощи приведённого выше кода.
Однако выскакивает ошибка и дебаг показывает на неверное условие (If [A1] = 1 Then )

Причина скрытия: в Физике ни к чему подробности Оптики, поэтому там достаточно основных цветов.
Заранее спасибо.
К сообщению приложен файл: Primer.xlsm(13Kb) · 8338577.png(10Kb)
 
Ответить
СообщениеСделал мини-версию файла в качестве примера. А в нём:

На первом листе (Главное меню) нужно выбрать версию справочника: Физика или Физика+Оптика

Если выбрана Физика+Оптика, то на втором листе (Стр.1) отображена полная таблица цветов с Красного по Коричневый, т.е. строки с 1 по 13.

Однако если выбрана Физика, то в таблице должны отображаться строки 1-10, т.е. цвета с Красного по Фиолетовый.

Примерно такую же задачу я пытался решить при помощи приведённого выше кода.
Однако выскакивает ошибка и дебаг показывает на неверное условие (If [A1] = 1 Then )

Причина скрытия: в Физике ни к чему подробности Оптики, поэтому там достаточно основных цветов.
Заранее спасибо.

Автор - SDrake
Дата добавления - 21.09.2016 в 13:06
Pelena Дата: Среда, 21.09.2016, 19:38 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 9890
Репутация: 2269 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Попробуйте так
[vba]
Код
Sub WorkSheet_Change(ByVal Target As Range)
    Dim i&, sh As Worksheet
    If Target.Address <> "$E$16" Then Exit Sub
    For Each sh In Worksheets
        If sh.Name <> "Главное меню" Then
            With sh
                If [J18] = 1 Then
                    For i = 10 To 13
                        .Rows(i).EntireRow.Hidden = True
                    Next i
                Else
                    For i = 10 To 13
                        .Rows(i).EntireRow.Hidden = False
                    Next i
                End If
            End With
        End If
    Next
End Sub
[/vba]
К сообщению приложен файл: Primer-1-.xlsm(19Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеПопробуйте так
[vba]
Код
Sub WorkSheet_Change(ByVal Target As Range)
    Dim i&, sh As Worksheet
    If Target.Address <> "$E$16" Then Exit Sub
    For Each sh In Worksheets
        If sh.Name <> "Главное меню" Then
            With sh
                If [J18] = 1 Then
                    For i = 10 To 13
                        .Rows(i).EntireRow.Hidden = True
                    Next i
                Else
                    For i = 10 To 13
                        .Rows(i).EntireRow.Hidden = False
                    Next i
                End If
            End With
        End If
    Next
End Sub
[/vba]

Автор - Pelena
Дата добавления - 21.09.2016 в 19:38
SDrake Дата: Четверг, 22.09.2016, 07:42 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Вроде работает! А если листов несколько и на разных листах нужно скрывать разную информацию?

Например, на Стр.2 - скрыть строки 34-36, если выбрана "Физика"
а на Стр.3 - скрыть строки 17-19, если выбрана "Физика".
К сообщению приложен файл: Primer2.xlsm(17Kb)


Сообщение отредактировал SDrake - Четверг, 22.09.2016, 07:43
 
Ответить
СообщениеВроде работает! А если листов несколько и на разных листах нужно скрывать разную информацию?

Например, на Стр.2 - скрыть строки 34-36, если выбрана "Физика"
а на Стр.3 - скрыть строки 17-19, если выбрана "Физика".

Автор - SDrake
Дата добавления - 22.09.2016 в 07:42
Pelena Дата: Четверг, 22.09.2016, 09:18 | Сообщение № 8
Группа: Модераторы
Ранг: Экселист
Сообщений: 9890
Репутация: 2269 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Попробуйте так.
Номера строк задаются в массиве
К сообщению приложен файл: 1707721.xlsm(25Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеПопробуйте так.
Номера строк задаются в массиве

Автор - Pelena
Дата добавления - 22.09.2016 в 09:18
SDrake Дата: Четверг, 22.09.2016, 18:58 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Очень сложно получается :( .
В оригинале у меня около 100 листов (~500 страниц для печати). Буду пробовать. Спасибо за помощь! :)
 
Ответить
СообщениеОчень сложно получается :( .
В оригинале у меня около 100 листов (~500 страниц для печати). Буду пробовать. Спасибо за помощь! :)

Автор - SDrake
Дата добавления - 22.09.2016 в 18:58
Pelena Дата: Четверг, 22.09.2016, 19:16 | Сообщение № 10
Группа: Модераторы
Ранг: Экселист
Сообщений: 9890
Репутация: 2269 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Очень сложно получается

Сложнее, чем было у Вас?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
Очень сложно получается

Сложнее, чем было у Вас?

Автор - Pelena
Дата добавления - 22.09.2016 в 19:16
SDrake Дата: Пятница, 23.09.2016, 06:05 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
В целом нет, но сам код сложнее. ) Там я хоть понимал, что надо просто добавить в макрос строку с нужным номером. Но в итоге всё сломалось при большом количестве :D
Тут я понимаю надо добавлять номера строк в

arrbeg = Array(10, 33, 17, и т.д.) - начальные
arrend = Array(13, 36, 19 и т.д.) - конечные

Но, что если на каком-то листе надо скрыть 2 диапазона? Например, строки 18-19 и 25-28.
 
Ответить
СообщениеВ целом нет, но сам код сложнее. ) Там я хоть понимал, что надо просто добавить в макрос строку с нужным номером. Но в итоге всё сломалось при большом количестве :D
Тут я понимаю надо добавлять номера строк в

arrbeg = Array(10, 33, 17, и т.д.) - начальные
arrend = Array(13, 36, 19 и т.д.) - конечные

Но, что если на каком-то листе надо скрыть 2 диапазона? Например, строки 18-19 и 25-28.

Автор - SDrake
Дата добавления - 23.09.2016 в 06:05
Pelena Дата: Пятница, 23.09.2016, 06:39 | Сообщение № 12
Группа: Модераторы
Ранг: Экселист
Сообщений: 9890
Репутация: 2269 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
И много ещё у Вас в запасе этих
что если
?

надо скрыть 2 диапазона
Тогда проще всего в отдельном столбце как-то пометить строки. Например, физику буквой ф, а оптику буквой о. И скрывать уже по этому критерию. Столбец при желании можно скрыть.
Если такой вариант приемлем, то с Вас файл с примером, учитывающем возможные варианты "что если"


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеИ много ещё у Вас в запасе этих
что если
?

надо скрыть 2 диапазона
Тогда проще всего в отдельном столбце как-то пометить строки. Например, физику буквой ф, а оптику буквой о. И скрывать уже по этому критерию. Столбец при желании можно скрыть.
Если такой вариант приемлем, то с Вас файл с примером, учитывающем возможные варианты "что если"

Автор - Pelena
Дата добавления - 23.09.2016 в 06:39
SDrake Дата: Пятница, 23.09.2016, 09:38 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Просто подзадачи возникают в процессе обсуждения и вникания. )
Я же сразу сказал, что
сам не шарю вообще
, а оригинал-файл
приложить не могу - сильно большой
. :)

Извиняюсь.
Приложил файл-пример. При выборе "Физики" надо отображать строки "ф" и "ф+о" ("о" скрывать). При выборе "Физики+Оптики" надо отображать строки "ф+о" и "о" ("ф" скрывать). Ещё на Стр.3. надо скрыть столбец F при выборе "Физики". И подскажите как менять код, если захочу скрывать другие строки/столбцы. Вроде всё. Спасибо ))
К сообщению приложен файл: Primer3.xlsm(18Kb)


Сообщение отредактировал SDrake - Пятница, 23.09.2016, 14:07
 
Ответить
СообщениеПросто подзадачи возникают в процессе обсуждения и вникания. )
Я же сразу сказал, что
сам не шарю вообще
, а оригинал-файл
приложить не могу - сильно большой
. :)

Извиняюсь.
Приложил файл-пример. При выборе "Физики" надо отображать строки "ф" и "ф+о" ("о" скрывать). При выборе "Физики+Оптики" надо отображать строки "ф+о" и "о" ("ф" скрывать). Ещё на Стр.3. надо скрыть столбец F при выборе "Физики". И подскажите как менять код, если захочу скрывать другие строки/столбцы. Вроде всё. Спасибо ))

Автор - SDrake
Дата добавления - 23.09.2016 в 09:38
Pelena Дата: Пятница, 23.09.2016, 15:29 | Сообщение № 14
Группа: Модераторы
Ранг: Экселист
Сообщений: 9890
Репутация: 2269 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Со строками сделала, а насчёт столбцов не совсем понятно, они тоже будут маркироваться? Тогда надо, чтобы эта маркировка на всех листах была на одной и той же строке.
К сообщению приложен файл: 6073155.xlsm(27Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеСо строками сделала, а насчёт столбцов не совсем понятно, они тоже будут маркироваться? Тогда надо, чтобы эта маркировка на всех листах была на одной и той же строке.

Автор - Pelena
Дата добавления - 23.09.2016 в 15:29
SDrake Дата: Понедельник, 26.09.2016, 05:52 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Да. Тогда можно сделать маркировку на 2 строке каждого листа.
 
Ответить
СообщениеДа. Тогда можно сделать маркировку на 2 строке каждого листа.

Автор - SDrake
Дата добавления - 26.09.2016 в 05:52
Pelena Дата: Понедельник, 26.09.2016, 08:05 | Сообщение № 16
Группа: Модераторы
Ранг: Экселист
Сообщений: 9890
Репутация: 2269 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Тогда так проверьте
К сообщению приложен файл: 5386328.xlsm(27Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеТогда так проверьте

Автор - Pelena
Дата добавления - 26.09.2016 в 08:05
SDrake Дата: Вторник, 27.09.2016, 06:09 | Сообщение № 17
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Да! Отлично работает. Скопировал код в оригинал и заменил значения ячеек. Уже настроил около 100 листов. Правда при выборе версии справочника, курсор секунды на 2 зависает )) Но строки и столбцы скрываются чётко. Огромное спасибо!!! :D hands
 
Ответить
СообщениеДа! Отлично работает. Скопировал код в оригинал и заменил значения ячеек. Уже настроил около 100 листов. Правда при выборе версии справочника, курсор секунды на 2 зависает )) Но строки и столбцы скрываются чётко. Огромное спасибо!!! :D hands

Автор - SDrake
Дата добавления - 27.09.2016 в 06:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скрыть строки в книге в зависимости от выбора на листе 1 (Формулы/Formulas)
Страница 1 из 11
Поиск:

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