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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 19:44   #1
Brucebelg
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 61
По умолчанию Как заставить код читать обновление величины в ячейке?

Есть код, который скрывает или показывает определенные строки в зависимости от величины в ячейке. Если в ячейку вводить величину вручную, то все код работает. На самом же деле, величина в ячейке является результатом вычисления и когда эта величина меняется, то код не хочет видеть изменения и скрывать строки. Можно ли этому помочь?
Brucebelg вне форума Ответить с цитированием
Старый 20.05.2010, 20:34   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Покажите ваш код, скажу, что можно сделать
motorway вне форума Ответить с цитированием
Старый 21.05.2010, 04:42   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

При непосредственном изменении значения ячейки (вручную, макросом и т.п.) наступает событие Worksheet_Change. Т.к. в этом случае у Вас все работает, то, видимо, макрос запускается именно по этому событию. Если же значение в ячейке является результатом вычисления на листе Excel, то вышеупомянутое событие не наступит. Запуск Вашего макроса нужно "привязывать" к событию пересчета листа Worksheet_Calculate.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 11:24   #4
Brucebelg
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 61
По умолчанию Cпасибо, суть ясна, а по формату вопрос

Вот первый код, который Change и который работает

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = [c10].Address Then
ActiveSheet.UsedRange.EntireRow.Hid den = False
Range(Target + 14 & ":22").EntireRow.Hidden = (Target > 2 And Target < 9)
End If
End Sub

Вот второй, как Вы посоветовали

Private Sub Worksheet_Calculate(ByVal Target As Range)
If Target.Address = [i23].Address Then
ActiveSheet.UsedRange.EntireRow.Hid den = False
Select Case Target
Case 0: Range("24:24").EntireRow.Hidden = True
End Select
End If
End Sub

Второй не работает, пишет Procedure declaration does not match description of event or procedure having the same name

Не подскажите, как поправить второй и объединить оба в один рабочий?
Brucebelg вне форума Ответить с цитированием
Старый 21.05.2010, 11:35   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Вот второй, как Вы посоветовали
Я так не советовал. У события Worksheet_Calculate нет аргумента Target. Это событие наступает при пересчете в любой ячейке листа и в модуле листа прописывается как Private Sub Worksheet_Calculate(). т.е. без аргументов.
В Ваших примерах всегда разные процедуры.
Скажите, в каком случае (при каком событии) что Вы хотите сделать.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 11:55   #6
Brucebelg
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 61
По умолчанию

Хочу следующее - в зависимости от значения в ячейке С10 (от 3 до 8) нужно скрывать линии, при С10=3 -> от 17 до 22, С10=4 -> от 18 до 22 и тд до С10=8.
При этом в ячейках K28,K29 и K30 калькулируются некие величины (либо 0 либо больше 0). Требуется,чтобы при K28=0 сворачивалась линия 32, а при любой другой величине - оставалась видимой. И точно такие же операции нужны для ячейки К29 и линии 33 и ячейки К30 и линии 34.
Brucebelg вне форума Ответить с цитированием
Старый 21.05.2010, 12:22   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите пример во вложении. Подробности в файле. Что не так?
Вложения
Тип файла: rar Книга1.rar (9.7 Кб, 23 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 14:37   #8
Brucebelg
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 61
По умолчанию У Вас в примере все работает, у меня = нет. Мистика

Я приложил настоящий файл (формат XLSM). Требуется, чтобы скрывалась строка 24, если в ячейке I24=0, строка 25 , если I25=0 и строка 26, если I26=0. Не знаю можно ли использовать ячейки в скрываемых линиях, но так же не работает, если пытаться вставить формулу из, скажем, I25 в L2 и использовать L2 в условиях кода.
Когда после существующего кода я вставляю

Private Sub Worksheet_Calculate()
If [L2] = 0 Then Rows(24).Hidden = True Else Rows(24).Hidden = False
End Su

начинается мелькание на экране и все вешается

Не могли бы Вы взглянуть?
Вложения
Тип файла: rar Selectorfinal.rar (640.9 Кб, 18 просмотров)
Brucebelg вне форума Ответить с цитированием
Старый 25.05.2010, 16:09   #9
Brucebelg
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 61
По умолчанию Уважаемый SAS888, не взгляните на реальный пример?

в предудщем сообщении. спасибо
Brucebelg вне форума Ответить с цитированием
Старый 26.05.2010, 07:04   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Когда после существующего кода я вставляю...
...начинается мелькание на экране и все вешается
В Вашем файле нет кода по событию Worksheet_Calculate. А что все-таки нужно, я не совсем понимаю. Ну, да ладно. Сделайте следующее:
Первой строкой кода напишите Application.EnableEvents = False, а последней - Application.EnableEvents = True. Это запретит обработку событий на время выполнения процедуры. Как раз это в Вашем случае и происходит. Сам код обработки пишите какой требуется. Скрыта строка с которой работает код или нет - без разницы.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить код работать во всех книгах указанной папки KNatalia Microsoft Office Excel 12 25.12.2012 11:32
Делфи. Как заставить читать данные с метки Pro4RE Помощь студентам 10 08.12.2009 21:48
Как читать Cookies erick_ Общие вопросы Delphi 1 23.02.2009 07:35
Как читать атрибуты с файлов? eks-s Общие вопросы Delphi 2 16.01.2008 02:25