powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ПО
22 сообщений из 22, страница 1 из 1
ПО
    #35564486
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, уважаемые программисты!
Ситуация следующая:
Есть ПО (ну не ПО, конечно, а макрос в excel? но здоровый) по оценке заёмщиков.
В нём несколько листов (вроде, 9), на разных листах - разные таблички.
На листах №1 и №2 - экономист вбивает данные балансов оцениваемого предприятия. (на листе №1 - форма1, на №2 - форма№2)
Дело вот в чём:
Вбиваются даты балансов (далее - ББ), в зависимости от их кол-ва, прога ведёт себя по-разному. Например, если ББ есть только один, то видимых листов только 5.
А если кол. ББ > 2, то Visible становятся такие листы, как "анализ динамики" и т.д.
Вот кусок кода, отображающий и скрывающий листы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'данный код - на листе база1
Public Sub worksheet_calculate()
Application.ScreenUpdating = False
Sheets("Анализ динамики").Unprotect
    If Range("b56").Value =  0  Then
        Sheets("Анализ динамики").Visible = False
        Sheets("Ограничения").Rows( 17 ).Hidden = True
    ElseIf Range("b56").Value =  1  Then
        Sheets("Анализ динамики").Visible = True
        Sheets("Ограничения").Rows( 17 ).Hidden = False
    End If
Sheets("Анализ динамики").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.ScreenUpdating = True
End Sub
Логика следующая: если на листе База 1 существует ячейка B56, которая =1, если есть динамика ББ (т.е. если вбит баланс, например, на 01.01.02 и баланс на 01.01.01 разница между датами -сторго 1 год). В остальных случаях - B56 = 0/
И всё бы отлично было, да мне начинают слать проги, где вбиты данные, и уже на листе база1 B56 = 1, а чёртовы листы не открваются.
В B56 следующая формула =СУММ(B55:I55).
Подскажите почему слетает: лист-то откалькулировался (0 на 1 поменялась, а не арботает)?
К чему привязать скрытие/отображение листов, если не к worksheet_calculate()?

Огромнейшее спасибо заранее!!!!
...
Рейтинг: 0 / 0
ПО
    #35564831
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: PlanB
> Доброго времени суток, уважаемые программисты!
> Ситуация следующая:
> Подскажите почему слетает: лист-то откалькулировался (0 на 1 поменялась, а не
> арботает)?

Может отключен автоматический пересчет листа?

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ПО
    #35564892
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так я посмотрел, там стоит "1" уже, а листы закрыты. Я, притом, понятия не имею, как они этого добились. Скорее всего, они не вбивают, а копируют ctrl+с/v , но лично у меня всё работает.
Отписал в мыло подробности и киданул то, что они мне прислали. Будет время, зацени плз)
...
Рейтинг: 0 / 0
ПО
    #35565038
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
Sheets("Анализ динамики").Unprotect
    If  ActiveSheet. Range("b56").Value = 0 Then
        Sheets("Анализ динамики").Visible = False
        Sheets("Ограничения").Rows(17).Hidden = True
...
Рейтинг: 0 / 0
ПО
    #35565100
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMSheets("Анализ динамики").Unprotect
If ActiveSheet.Range("b56").Value = 0 Then
Sheets("Анализ динамики").Visible = False
Sheets("Ограничения").Rows(17).Hidden = True
Вы имеете ввиду уточнить адрес диапазона...?
Код: plaintext
1.
2.
3.
4.
Sheets("Анализ динамики").Unprotect
    If  Sheets("база1").Range("b56").Value =  0  Then
        Sheets("Анализ динамики").Visible = False
        Sheets("Ограничения").Rows( 17 ).Hidden = True
...
Рейтинг: 0 / 0
ПО
    #35565146
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю, некой процедуры, постоянно следящей за значением в ячейке нет, либо она много будет памяти жрать. По моему мнению, worksheet_calculate() - не самая лучшая идея, но я др. выхода не вижу
...
Рейтинг: 0 / 0
ПО
    #35565179
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMIf ActiveSheet.Range("b56").Value = 0 ThenЭтот код - на листе "база1", который и калькулируется. Не думал, что слетит.
Точнее, там всё и работает. А вот тест, при котором такое не работает, я не смог придумать(((
...
Рейтинг: 0 / 0
ПО
    #35565862
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы поостерегся писать в событии worksheet_calculate ScreenUpdating, Unprotect,Protect, Visible, Hidden. Это событие может очень часто вызываться. И что напрягает у вас в коде, так это:

worksheet_calculate, а должно быть Worksheet_Calculate

Успехов
...
Рейтинг: 0 / 0
ПО
    #35565896
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnЯ бы поостерегся писать в событии worksheet_calculate ScreenUpdating, Unprotect,Protect, Visible, Hidden. Это событие может очень часто вызываться.
Там процедура If, так что это происходит редко. И, вроде, не тупит.

worksheet_calculate
из меня программер, как из собачего хвоста сито... я её скока тестировал, а не видел очевидного!

и что делать? Точнее, как правильно прописать событие?:
...
Рейтинг: 0 / 0
ПО
    #35565906
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставьте-ка на этой линии кода точку останова и посмотрите, оно (событие, я имею ввиду)вызывается у вас или нет.

Успехов
...
Рейтинг: 0 / 0
ПО
    #35565978
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn Поставьте-ка на этой линии кода точку останова и посмотрите, оно (событие, я имею ввиду)вызывается у вас или нет.

Да, вызывается. Понятия не имею, почему с мал. буквы.
...
Рейтинг: 0 / 0
ПО
    #35565985
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Public Sub worksheet_calculate()Что-то в скобках там может стоять?
...
Рейтинг: 0 / 0
ПО
    #35566012
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как мне по-другому отлавливать изменение ячейки, кроме Public Sub worksheet_calculate()?????
...
Рейтинг: 0 / 0
ПО
    #35566061
Фотография ujcnm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanBPublic Sub worksheet_calculate()Что-то в скобках там может стоять?


Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
...
Рейтинг: 0 / 0
ПО
    #35566064
Фотография ujcnm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanBКак мне по-другому отлавливать изменение ячейки, кроме Public Sub worksheet_calculate()?????


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
...
Рейтинг: 0 / 0
ПО
    #35566430
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставьте RefEdit контроль, его Link cell - адрес ячейки, изменение которой отлавливаете. И обрабатывайте событие RefEdit1_Change()
...
Рейтинг: 0 / 0
ПО
    #35567860
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ujcnmPrivate Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
не отловит такая процедура момент, когда формула =СУММ(B55:I55) в ячейке станет выдавать 1 вместо 0.

ujcnmPrivate Sub Workbook_SheetCalculate(ByVal Sh As Object)
что такое ByVal Sh As Object?
что делает?
...
Рейтинг: 0 / 0
ПО
    #35568140
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnПоставьте RefEdit контроль, его Link cell - адрес ячейки, изменение которой отлавливаете. И обрабатывайте событие RefEdit1_Change()Разжуйте, пожалуйста! Заранее спасибо!
...
Рейтинг: 0 / 0
ПО
    #35568410
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Откройте Excel
2. Кликните правой клавишей мыши по свободному пространству на линии меню Excel
3. Удостоверьтесь, что линия Control Toolbox отмечена птичкой
4. На панели Control Toolbox кликните по иконочке с молоточком и гаечным ключом
5. Найдите в появившемся списке RefEdit.ctrl
6. Кликните по этому имени
7. Положите его курсором на лист Excela (проведите по листу курсором с нажатой клавишей мыши)
8. Кликните правой клавишей по положенному на лист контролю
9. Найдите в меню линию Properties
10. Кликните по ней
11. Найдите в списке свойств свойство LinkedCell
12. Напечатайте во второй колоночке A1
13. Закройте панель свойств, кликнув на крестик в правом верхнем углу панели.
14. На панели Control Toolbox кликните по иконочке с угольником, линейкой и карандашом
15. Нажмите Alt-F11
16. В кодовом окне для того листа, на который вы посадили RefEdit, откройте левый верхний комбобокс
17. Выберете RefEdit1
18. В кодовом окне для того листа, на который вы посадили RefEdit, откройте правый верхний комбобокс
18. Выберете Change
19. Внутри процедуры события RefEdit1_Change напишите:
Код: plaintext
Range("B1").Value = Range("A1").Value
20. Вернитесь в лист Excel
21. При необходимости, на панели Control Toolbox кликните по иконочке с угольником, линейкой и карандашом еще раз, чтобы выйти из режима дизайна, если вы еще в нем.
22. Напечатайте что-нибудь в клеточку A1
23. Наблюдайте за содержимым B1
...
Рейтинг: 0 / 0
ПО
    #35568898
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnЗакройте панель свойств, кликнув на крестик в правом верхнем углу панели.)))))))

Подскажите ещё один вопросик: не возникает подводных камней при запуске с другой машины?
(например, =ДАТАМЕС() не работает, если пакет анализа не включён)
...
Рейтинг: 0 / 0
ПО
    #35569987
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня не возникало...
...
Рейтинг: 0 / 0
ПО
    #35571244
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сапсибо! Получилось красиво!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ПО
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]