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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2015, 00:11   #41
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Вопрос 1. что должно служить толчком для системы, чтобы скрыть/показать строки на гипотетических 62 и даже более листах?
Ответ: В листе "расчёт стоимости", в ячейках выделенных жёлтым, вручную вносятся данные. Каждая ячейка подвязана под конкретный лист:
Ячейка I7, меняет данные в листе "1" в ячейке F30 (соответственно F30 - контролированная ячейка);
Ячейка I8, меняет данные в листе "2" в ячейке F30 (соответственно F30 - контролированная ячейка);
Ячейка I9, меняет данные в листе "3" в ячейке F40 (соответственно F40 - контролированная ячейка);
и т.д.
отлично! а подскажите мне темному, как пользователь изменит значение в защищенной ячейке на защищенном листе??????????????


valerij,
Цитата:
IgorGO, вы, что не можете чисто по теме ответить?
чисто по теме я ответил в сообщени #3
Цитата:
rows(r).hidden = cells(r,c) = 0
то, что программирование не твое понимаем не только ты и я, полагаю это понимают все на форуме.
твой совет решил проблему автора темы? зачем ты вообще встрял в тему? я, например не даю советов по выпечке и ее доставке в точки реализации потому что никогда с этим не сталкивался и ничего в этом не понимаю.

kvaavals
Тоесть, для листа "1":
r = 30 'Номер строки контролируемой ячейки
Для листа "2":
r = 30 'Номер строки контролируемой ячейки
Для листа "3":
r = 40 'Номер строки контролируемой ячейки

это я написал в своем вопросе:
Цитата:
судя по описанию для листа:
1 это ячейка R30C6?
2 - R30C6?
3 - R40C6?
повторю его:
как определить адрес ячейки для листов 4, 5, 6 ... 62 ... и дальше?

напоминаю, это последняя попытка.
600 просмотров - слишком много для темы ни о чем!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 05.10.2015 в 06:36.
IgorGO вне форума Ответить с цитированием
Старый 05.10.2015, 06:00   #42
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите пример во вложении.
Листы "1", "2" и "3" защищены. Пароль "1234" для всех листов одинаковый.
В коде макроса прописаны 3 массива. Массив "List()" содержит имена тех листов в которых требуется скрывать (отображать) строки по условию. Массив "Stroka()" содержит номера строк, которые требуется скрывать (отображать) на соответствующих листах. Массив "Addr()" содержит адреса контролируемых ячеек соответствующих листов. Эти массивы синхронизированы, т. е. все элементы массива находятся в соответствии. Добавляйте (изменяйте) эти массивы по Вашим требованиям, соблюдая количество и порядок их элементов.
Если для разных листов требуется использовать разные пароли, то добавьте 4-ый массив,содержащий пароли, соблюдая соответствие его элементов порядку листов, а в коде макроса, при снятии и установке защиты текущего листа используйте строковую переменную.
Код:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Dim i As Integer, Stroka(), Addr(), List()
    Application.ScreenUpdating = False: Application.EnableEvents = False
    List = Array("1", "2", "3") 'Массив и сменами листов, в которых скрываем (отображаем) строки
    Stroka = Array(30, 30, 40) 'Массив с номерами скрываемых (отображаемых) строк
    Addr = Array("$F$30", "$F$30", "$F$40") 'Массив с адресами контролируемых ячеек
    For i = LBound(List) To UBound(List)
        With Sheets(CStr(List(i)))
            .Unprotect "1234"
            If .Range(Addr(i)) = 0 Then .Rows(Stroka(i)).Hidden = True Else .Rows(Stroka(i)).Hidden = False
            .Protect "1234"
        End With
    Next
    Application.ScreenUpdating = True: Application.EnableEvents = True
End Sub
Вложения
Тип файла: rar Експерементальный шаблон6.rar (46.3 Кб, 15 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 05.10.2015, 09:57   #43
kvaavals
Пользователь
 
Регистрация: 29.09.2015
Сообщений: 23
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Посмотрите пример во вложении.
Листы "1", "2" и "3" защищены. Пароль "1234" для всех листов одинаковый.
В коде макроса прописаны 3 массива. Массив "List()" содержит имена тех листов в которых требуется скрывать (отображать) строки по условию. Массив "Stroka()" содержит номера строк, которые требуется скрывать (отображать) на соответствующих листах. Массив "Addr()" содержит адреса контролируемых ячеек соответствующих листов. Эти массивы синхронизированы, т. е. все элементы массива находятся в соответствии. Добавляйте (изменяйте) эти массивы по Вашим требованиям, соблюдая количество и порядок их элементов.
Если для разных листов требуется использовать разные пароли, то добавьте 4-ый массив,содержащий пароли, соблюдая соответствие его элементов порядку листов, а в коде макроса, при снятии и установке защиты текущего листа используйте строковую переменную.
Код:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Dim i As Integer, Stroka(), Addr(), List()
    Application.ScreenUpdating = False: Application.EnableEvents = False
    List = Array("1", "2", "3") 'Массив и сменами листов, в которых скрываем (отображаем) строки
    Stroka = Array(30, 30, 40) 'Массив с номерами скрываемых (отображаемых) строк
    Addr = Array("$F$30", "$F$30", "$F$40") 'Массив с адресами контролируемых ячеек
    For i = LBound(List) To UBound(List)
        With Sheets(CStr(List(i)))
            .Unprotect "1234"
            If .Range(Addr(i)) = 0 Then .Rows(Stroka(i)).Hidden = True Else .Rows(Stroka(i)).Hidden = False
            .Protect "1234"
        End With
    Next
    Application.ScreenUpdating = True: Application.EnableEvents = True
End Sub
Всё работает! Пока проверил на 3-х листах, буду пробовать дальше. Огромное спасибо!
kvaavals вне форума Ответить с цитированием
Старый 08.10.2015, 10:38   #44
kvaavals
Пользователь
 
Регистрация: 29.09.2015
Сообщений: 23
По умолчанию

Ещё чуть поправил код SAS888, так как таблицы долго пересчитывались. Сейчас так сделано, что бы все таблицы были неактивны пока на них не перейдёшь. Так что сейчас всё ОТЛИЧНО работает!
Большое спасибо SAS888 за терпение )
kvaavals вне форума Ответить с цитированием
Старый 14.09.2018, 16:07   #45
Wolfer42
Новичок
Джуниор
 
Регистрация: 14.09.2018
Сообщений: 1
По умолчанию

Спасибо.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long, c As Long, Stroka As Long
Stroka = 10 'Номер строки, которая должна скрываться (отображаться)
r = 1 'Номер строки контролируемой ячейки
c = 1 'Номер столбца контролируемой ячейки
Rows(Stroka).Hidden = Cells(r, c) = 0
End Sub

Работает =)
Wolfer42 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последовательное заполнение ячеек при помощи диалоговых окон, при определенном значении в определенной ячейке Inna2708 Microsoft Office Excel 5 10.11.2014 01:15
Как вставить строку в RichEdit в определённом месте? Евгений9 Общие вопросы Delphi 0 01.03.2014 11:11
Как скрыть строку при выполнении условия в другой ячейке Алексей777 Microsoft Office Excel 4 09.12.2010 10:06
Как добавить нужную строку в memo Volkogriz Общие вопросы Delphi 5 02.12.2008 22:38
Как найти нужную строку в ListBox? DelphiKettle Помощь студентам 2 05.09.2007 22:02