Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ПО / 22 сообщений из 22, страница 1 из 1
29.09.2008, 09:42
    #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
29.09.2008, 11:58
    #35564831
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
> Автор: PlanB
> Доброго времени суток, уважаемые программисты!
> Ситуация следующая:
> Подскажите почему слетает: лист-то откалькулировался (0 на 1 поменялась, а не
> арботает)?

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

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
29.09.2008, 12:14
    #35564892
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
так я посмотрел, там стоит "1" уже, а листы закрыты. Я, притом, понятия не имею, как они этого добились. Скорее всего, они не вбивают, а копируют ctrl+с/v , но лично у меня всё работает.
Отписал в мыло подробности и киданул то, что они мне прислали. Будет время, зацени плз)
...
Рейтинг: 0 / 0
29.09.2008, 12:57
    #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
29.09.2008, 13:14
    #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
29.09.2008, 13:27
    #35565146
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
Как я понимаю, некой процедуры, постоянно следящей за значением в ячейке нет, либо она много будет памяти жрать. По моему мнению, worksheet_calculate() - не самая лучшая идея, но я др. выхода не вижу
...
Рейтинг: 0 / 0
29.09.2008, 13:37
    #35565179
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
AndreTMIf ActiveSheet.Range("b56").Value = 0 ThenЭтот код - на листе "база1", который и калькулируется. Не думал, что слетит.
Точнее, там всё и работает. А вот тест, при котором такое не работает, я не смог придумать(((
...
Рейтинг: 0 / 0
29.09.2008, 17:04
    #35565862
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
Я бы поостерегся писать в событии worksheet_calculate ScreenUpdating, Unprotect,Protect, Visible, Hidden. Это событие может очень часто вызываться. И что напрягает у вас в коде, так это:

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

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

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

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

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

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


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


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
...
Рейтинг: 0 / 0
29.09.2008, 22:22
    #35566430
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
Поставьте RefEdit контроль, его Link cell - адрес ячейки, изменение которой отлавливаете. И обрабатывайте событие RefEdit1_Change()
...
Рейтинг: 0 / 0
30.09.2008, 15:36
    #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
30.09.2008, 17:05
    #35568140
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
VladConnПоставьте RefEdit контроль, его Link cell - адрес ячейки, изменение которой отлавливаете. И обрабатывайте событие RefEdit1_Change()Разжуйте, пожалуйста! Заранее спасибо!
...
Рейтинг: 0 / 0
30.09.2008, 19:27
    #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
01.10.2008, 09:44
    #35568898
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПО
VladConnЗакройте панель свойств, кликнув на крестик в правом верхнем углу панели.)))))))

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


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