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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2012, 12:11   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Событие "открыто окно предварительного просмотра"

Как отловить переход в окно пред просмотра и выход из него?
Оказалось что форма открытая в режиме vbModeless, остается открытой - нужно бы её убрать и по выходу снова открыть.
Событие WorkbookBeforePrint наступает перед печатью и предварительным просмотром, думаю его можно использовать. Но не шел события выхода.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 05.01.2012, 12:26   #2
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Как я понял после закрытия окна предварительного просмотра наступает событие WorkbookActivate.
Но вот если ввести такой код:
Код:
Private Sub ExApp_WorkbookActivate(ByVal Wb As Workbook)
    ПанельУправления_Создать
End Sub

Private Sub ExApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
    ПанельУправленияУдалить
End Sub
По выходу из окна предварительного просмотра получаем вот такую картинку... Убирается переключением в другое окно Excel и возвратом. При переключении на другие программы, их окна выводятся, а вот обратно перейти не удается.
Если панель не отключать то возвращаемся без этого спецэффекта. К чему бы это?
Изображения
Тип файла: jpg Untitled-1.jpg (58.9 Кб, 164 просмотров)
С уважением, Алексей.

Последний раз редактировалось tae1980; 05.01.2012 в 12:30.
tae1980 вне форума Ответить с цитированием
Старый 05.01.2012, 13:58   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Если подправить код так
Код:
Private Sub ExApp_WorkbookActivate(ByVal Wb As Workbook)
    ПанельУправления_Создать
End Sub

Private Sub ExApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
    'ПанельУправленияУдалить
    End
End Sub
То выход происходит нормально. Но отключаются события уровня приложения, и как следствие не наступает событие ExApp_WorkbookActivate.
Где же косяк? Панель создается как обычно, стандартными средствами, там же запускается форма. Почему такая разница в поведении?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 05.01.2012, 15:06   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Снова исправил код
Код:
Private Sub ExApp_WorkbookActivate(ByVal Wb As Workbook)
    ПанельУправления_Создать
End Sub

Private Sub ExApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
    If МенеджерЛистов.Visible Then Unload МенеджерЛистов
End Sub
В таком виде вроде все нормально. Похоже проблема в форме в режиме vbModeless. Только какого ..... оно не работает в первом варианте не понятно, ведь там она так же удаляется....
Но есть другая проблема событие ExApp_WorkbookActivate, наступает как-то непонятно. Если поставить точки останова, оно наступает и нормально работает, если их убрать - событие перестает наступать.
Что за сюрпризы? Где я косячу?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 05.01.2012, 15:41   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Новая инфа.
решил исправить код так:
Код:
Private Sub ExApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
    If МенеджерЛистов.Visible Then Unload МенеджерЛистов
    ПанельУправленияУдалить
End Sub
То есть не только убрать форму, но и убрать панель. Внутри процедуры "ПанельУправленияУдалить" есть аналогичная строчка If, то есть дважды форма не закроется. Получил картинку аналогичную приведенной раннее в картинке. При чем такая картинка наступает до наступления события ExApp_WorkbookActivate. То есть обратно панель не создается.

Вывод: форма не причем, похоже виновата панель инструментов?
Есть возражения?

Почему если, оставить панель на месте, то все проходит нормально, стоит её убрать - начинаются косяки? Где логика?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 05.01.2012, 19:44   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Алексей, вы всерьёз думаете, что мы сможем вам помочь?

Цитата:
Что за сюрпризы? Где я косячу?
Вы там кучу всего намудрили с событиями приложения, панелями инструментов, менеджерами листов, и т.д. и т.п.
Количество кода наверняка исчисляется тысячами строк.

Там что угодно с чем угодно конфликтовать может.
Строить десятки предположений, почему там что-то у вас не работает как надо, вряд ли кто будет.
Всё равно не угадаем. А потом выяснится, что вы там в одном из сотен макросов забыли какую-то строчку убрать или добавить.

Цитата:
Есть возражения?
Есть совет: потихоньку останавливать разработку программы.
Там ведь давно всё работает, а вы занимаетесь украшательствами и УСЛОЖНЕНИЕМ интерфейса.
К чему всё это?
Менеджеры листов давно созданы, а как там кнопочки запуска макросов расположены - не так уж и важно, по сути.
EducatedFool вне форума Ответить с цитированием
Старый 05.01.2012, 21:58   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Алексей, вы всерьёз думаете, что мы сможем вам помочь?
Да, думаю что можете. Как минимум не замыленным взглядом. Что уже много. Да просто высказаться, и то помощь. :)) Когда формулируешь вопрос, не много лучше начинаешь его понимать. Мне очень хорошо помогает друг, который вообще не знает VBA.
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вы там кучу всего намудрили с событиями приложения, панелями инструментов, менеджерами листов, и т.д. и т.п.
Количество кода наверняка исчисляется тысячами строк.
Там что угодно с чем угодно конфликтовать может.
Это разве много... "Стрижка только началась". (с :)
Не малая его часть, это обход ограничений которые накладывает excel.
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Строить десятки предположений, почему там что-то у вас не работает как надо, вряд ли кто будет.
Всё равно не угадаем. А потом выяснится, что вы там в одном из сотен макросов забыли какую-то строчку убрать или добавить.
Поиск ошибок это искусство, зачастую может помочь просто свежий взгляд, и чуть-чуть больший опыт. Я конечно не профессиональный программист, и не строю иллюзий на счет отсутствия ошибок, но и не полный лапать.
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Есть совет: потихоньку останавливать разработку программы.
К сожалению я не могу показать и объяснить весь проект, думаю мне бы удалось показать, что это только начала более глобальной идеи реализация которой еще впереди. Был бы очень рад личному общения за чашкой чая или кружкой пива.
Сейчас пытаюсь собрать последнюю рабочую бету. Так сказать подвести итоги. Уже принято решение о переносе проекта в web. Но это задача следующих 6 месяцев.
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Там ведь давно всё работает, а вы занимаетесь украшательствами и УСЛОЖНЕНИЕМ интерфейса.
К чему всё это?
Я не занимаюсь украшениями, я как раз сторонки минимализма. А вот усложнение интерфейса, это да (хотя я не считаю, что усложняю его, как раз наоборот). Но это не есть зло. "Все хорошо в меру" (с) Я считаю, что еще не достиг черты за которой мои идеи превратятся во зло. Мне просто нужны инструменты, которых нет в excel, вот и приходиться их реализовывать самостоятельно.
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Менеджеры листов давно созданы,
Хотя бы в одном реализована древовидная схема хранения листов? Еще раз просмотрел ссылку, не нашел ни чего похожего на то что делаю я. Вы смотрели что получается у меня? Было бы интересно узнать ваше мнение, да же отрицательное. Это позволит мне провести работу над ошибками. Если появиться желание посмотреть, вышлю последнюю версию.
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
а как там кнопочки запуска макросов расположены - не так уж и важно, по сути.
В корне не согласен ЭТО САМОЕ ВАЖНОЕ. В СССР была даже профильная наука (искал книги по ней - не нашел :(. Очень важны рабочие инструменты оператора, это 70% успешной работы. Я сумел реализовать не более 40% идей, и уже производительность моих девочек в 3-5 раз выше чем в других конторах на аналогичных программах. И я знаю, что могу сделать производительность выше в 15-20 раз, только за счет того что дам девчонкам более совершенные рабочие инструменты.
С уважением, Алексей.

Последний раз редактировалось tae1980; 05.01.2012 в 22:02.
tae1980 вне форума Ответить с цитированием
Старый 05.01.2012, 22:18   #8
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Вот подготовил файл, в котором воссоздал свои проблемы. Здесь нет ничего лишнего. Может кто поймет где ошибка.
В таком виде книга выдаст экран который показан на картинке выше.
Если поменять строки в обработчике событий, то все работает хорошо, но форма не восстанавливается.
Код:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    'If МенеджерЛистов.Visible Then Unload МенеджерЛистов
    ПанельУправленияУдалить
End Sub
Вложения
Тип файла: rar Test.rar (84.5 Кб, 17 просмотров)
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 03.03.2019, 14:56   #9
Vladimir8706
Новичок
Джуниор
 
Регистрация: 03.03.2019
Сообщений: 1
По умолчанию Решение с формой

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Вот подготовил файл, в котором воссоздал свои проблемы. Здесь нет ничего лишнего. Может кто поймет где ошибка.
В таком виде книга выдаст экран который показан на картинке выше.
Если поменять строки в обработчике событий, то все работает хорошо, но форма не восстанавливается.
Код:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    'If МенеджерЛистов.Visible Then Unload МенеджерЛистов
    ПанельУправленияУдалить
End Sub
Вот как я решил подобную проблему:
Код:
Private Sub PredButton_Click()
Me.Hide
Sheets("Лист").PrintPreview
Me.Show
End Sub
После закрытия предварительного просмотра форма снова запускается.
Vladimir8706 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(пред)новогоднее настроение... есть ли оно у вас? Вадим Мошев Свободное общение 105 01.01.2012 20:46
паскаль. циклы с пред- и постусловием. ирэна Помощь студентам 2 03.12.2011 10:39
Открывать окно печати, окно просмотра и изменять масштаб. segail Microsoft Office Excel 1 08.08.2010 19:31
Окно предварительного просмотра VladimirVB Компоненты Delphi 3 11.05.2009 08:42
php - ссылки на пред. и след. статью iankov PHP 18 08.02.2009 02:22