Добрый день! Возникла проблема при подготовке книги 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.]
Добрый день! Возникла проблема при подготовке книги 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
Сообщение отредактировал SDrake - Среда, 21.09.2016, 08:03
Здравствуйте. Почему именно Worksheet_Calculate? Может, другое событие использовать? Например, при изменении ячейки со списком пробежаться макросом по всем листам и скрыть/отобразить строки.
Здравствуйте. Почему именно Worksheet_Calculate? Может, другое событие использовать? Например, при изменении ячейки со списком пробежаться макросом по всем листам и скрыть/отобразить строки.Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Это единственный сработавший код, из всех, что я нашёл в темах по подобному вопросу. Буду благодарен, если подскажете более правильное/простое решение.
Это единственный сработавший код, из всех, что я нашёл в темах по подобному вопросу. Буду благодарен, если подскажете более правильное/простое решение.SDrake
Чтобы решение было оптимальным, а не просто перебор строк, нужен Ваш файл. Причем именно в таком формате, как описано в п.3 Правил форума (строк можно и побольше). И желательно пояснение причин скрытия-открытия именно этих строк на каждом из листов.
Чтобы решение было оптимальным, а не просто перебор строк, нужен Ваш файл. Причем именно в таком формате, как описано в п.3 Правил форума (строк можно и побольше). И желательно пояснение причин скрытия-открытия именно этих строк на каждом из листов._Boroda_
Сделал мини-версию файла в качестве примера. А в нём:
На первом листе (Главное меню) нужно выбрать версию справочника: Физика или Физика+Оптика
Если выбрана Физика+Оптика, то на втором листе (Стр.1) отображена полная таблица цветов с Красного по Коричневый, т.е. строки с 1 по 13.
Однако если выбрана Физика, то в таблице должны отображаться строки 1-10, т.е. цвета с Красного по Фиолетовый.
Примерно такую же задачу я пытался решить при помощи приведённого выше кода. Однако выскакивает ошибка и дебаг показывает на неверное условие (If [A1] = 1 Then )
Причина скрытия: в Физике ни к чему подробности Оптики, поэтому там достаточно основных цветов. Заранее спасибо.
Сделал мини-версию файла в качестве примера. А в нём:
На первом листе (Главное меню) нужно выбрать версию справочника: Физика или Физика+Оптика
Если выбрана Физика+Оптика, то на втором листе (Стр.1) отображена полная таблица цветов с Красного по Коричневый, т.е. строки с 1 по 13.
Однако если выбрана Физика, то в таблице должны отображаться строки 1-10, т.е. цвета с Красного по Фиолетовый.
Примерно такую же задачу я пытался решить при помощи приведённого выше кода. Однако выскакивает ошибка и дебаг показывает на неверное условие (If [A1] = 1 Then )
Причина скрытия: в Физике ни к чему подробности Оптики, поэтому там достаточно основных цветов. Заранее спасибо.SDrake
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]
Попробуйте так [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
В целом нет, но сам код сложнее. ) Там я хоть понимал, что надо просто добавить в макрос строку с нужным номером. Но в итоге всё сломалось при большом количестве Тут я понимаю надо добавлять номера строк в
arrbeg = Array(10, 33, 17, и т.д.) - начальные arrend = Array(13, 36, 19 и т.д.) - конечные
Но, что если на каком-то листе надо скрыть 2 диапазона? Например, строки 18-19 и 25-28.
В целом нет, но сам код сложнее. ) Там я хоть понимал, что надо просто добавить в макрос строку с нужным номером. Но в итоге всё сломалось при большом количестве Тут я понимаю надо добавлять номера строк в
arrbeg = Array(10, 33, 17, и т.д.) - начальные arrend = Array(13, 36, 19 и т.д.) - конечные
Но, что если на каком-то листе надо скрыть 2 диапазона? Например, строки 18-19 и 25-28.SDrake
Тогда проще всего в отдельном столбце как-то пометить строки. Например, физику буквой ф, а оптику буквой о. И скрывать уже по этому критерию. Столбец при желании можно скрыть. Если такой вариант приемлем, то с Вас файл с примером, учитывающем возможные варианты "что если"
Тогда проще всего в отдельном столбце как-то пометить строки. Например, физику буквой ф, а оптику буквой о. И скрывать уже по этому критерию. Столбец при желании можно скрыть. Если такой вариант приемлем, то с Вас файл с примером, учитывающем возможные варианты "что если"Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Извиняюсь. Приложил файл-пример. При выборе "Физики" надо отображать строки "ф" и "ф+о" ("о" скрывать). При выборе "Физики+Оптики" надо отображать строки "ф+о" и "о" ("ф" скрывать). Ещё на Стр.3. надо скрыть столбец F при выборе "Физики". И подскажите как менять код, если захочу скрывать другие строки/столбцы. Вроде всё. Спасибо ))
Просто подзадачи возникают в процессе обсуждения и вникания. ) Я же сразу сказал, что
Извиняюсь. Приложил файл-пример. При выборе "Физики" надо отображать строки "ф" и "ф+о" ("о" скрывать). При выборе "Физики+Оптики" надо отображать строки "ф+о" и "о" ("ф" скрывать). Ещё на Стр.3. надо скрыть столбец F при выборе "Физики". И подскажите как менять код, если захочу скрывать другие строки/столбцы. Вроде всё. Спасибо ))SDrake
Со строками сделала, а насчёт столбцов не совсем понятно, они тоже будут маркироваться? Тогда надо, чтобы эта маркировка на всех листах была на одной и той же строке.
Со строками сделала, а насчёт столбцов не совсем понятно, они тоже будут маркироваться? Тогда надо, чтобы эта маркировка на всех листах была на одной и той же строке.Pelena
Да! Отлично работает. Скопировал код в оригинал и заменил значения ячеек. Уже настроил около 100 листов. Правда при выборе версии справочника, курсор секунды на 2 зависает )) Но строки и столбцы скрываются чётко. Огромное спасибо!!!
Да! Отлично работает. Скопировал код в оригинал и заменил значения ячеек. Уже настроил около 100 листов. Правда при выборе версии справочника, курсор секунды на 2 зависает )) Но строки и столбцы скрываются чётко. Огромное спасибо!!! SDrake