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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2011, 13:26   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Событие Workbook_WindowResize

Нужно отследить изменения размеров окна. Пытаюсь использовать для этих целей событие Workbook_WindowResize(ByVal Wn As Window). Для чего в "ЭтаКнига" размещаю код:
Код:
Private Sub Workbook_WindowResize(ByVal Wn As Window)
  Cells(1, 1) = 1111
  w = 2
End Sub
После чего всячески изменяю размер окна, но ничего не происходит.
Что я делаю не так?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 11.06.2011, 15:43   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Нужно отследить изменения размеров окна. Пытаюсь использовать для этих целей событие Workbook_WindowResize(ByVal Wn As Window). Для чего в "ЭтаКнига" размещаю код:
Код:
Private Sub Workbook_WindowResize(ByVal Wn As Window)
  Cells(1, 1) = 1111
  w = 2
End Sub
После чего всячески изменяю размер окна, но ничего не происходит.
Что я делаю не так?
скорей всего Вы путаете книгу ёксель и приложение ёксель
Если Вы измените размер активного окна книги excel , то событие все же наступит.
для справки : самый верхний крестик принадлежит объекту excel, а тот что пониже excel.activeWorkbook

В вашем же коде написано Workbook_WindowResize
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 11.06.2011, 17:37   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
скорей всего Вы путаете книгу ёксель и приложение ёксель
Если Вы измените размер активного окна книги excel , то событие все же наступит.
для справки : самый верхний крестик принадлежит объекту excel, а тот что пониже excel.activeWorkbook
В вашем же коде написано Workbook_WindowResize
Точно. Спасибо.
А как же отследить это событие для объекта excel?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 11.06.2011, 18:34   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Это все в pesonal.xls
Код:
Option Explicit

Private WithEvents App As Application    ' объявляем объект Application для того, чтобы можно было отлавливать события других книг

Private Sub App_WindowResize(ByVal Wb As Workbook, ByVal Wn As Window)

End Sub

'После этого там же назначаете на открытие макрос:
Private Sub Workbook_Open()
    Set App = Application    ' назначаем объект Application для того, чтобы можно было отлавливать события других книг
    Application.WindowState = xlMaximized
End Sub
'После этого в левом выпадающем списке (объектов) кроме Workbook и (Общая область) появится также и объект Арр.
'При выборе его в правом выпадающем списке (событий) появится куча отлавливаемых событий других книг. И вы сможете в процедуре
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
'Wb.ActiveSheet.DisplayPageBreaks = True
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 11.06.2011, 19:09   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Это все в pesonal.xls
Нашел одну хорошую лекцию по этой теме, как я понял это о чем ты пишешь. Вот ее часть:
Цитата:
Для того чтобы заставить реагировать на события объект Excel.Application, необходимо выполнить четыре шага:
1. Создать модуль, задающий собственный класс для объекта Excel.Application, в котором можно будет размещать обработчики возникающих событий. Устроен этот класс очень просто и состоит в момент создания из одной строчки, поскольку класс не имеет методов и имеет ровно одно свойство, задающее объект Application с событиями. Конечно, позже этот класс будет пополняться обработчиками событий. Вот как выглядит на этапе создания описание этого класса, которому я в своем примере дал имя AppWithEvents.
Option Explicit
'Класс, описывающий объект Application With Events.
'Класс не имеет методов, задается одним свойством.
Public WithEvents ExApp As Application
2. Следующее, что необходимо сделать - это определить объект вновь созданного класса AppWithEvents. И эта задача решается в одну строчку. Объявление объекта я поместил в раздел объявлений созданного ранее стандартного модуля. Заметьте, необходимо не только объявить объект, но и создать его, используя спецификатор New.
Public AppWithEv As New AppWithEvents
3. Третьим шагом является связывание двух объектов Application, стандартного и созданного объекта, умеющего реагировать на события. По-видимому, лучшим местом, где следует осуществить связывание, является обработчик события Open того документа, в котором описан класс AppWithEvents. Тогда после открытия этого документа и вплоть до его закрытия Excel будет реагировать на события, связанные с объектом Excel.Application. Вот как осуществляется связывание:
Private Sub Workbook_Open()
'Связывание двух объектов Application -
'стандартного и реагирующего на события.
Set AppWithEv.ExApp = Excel.Application
End Sub
4. На этом шаге созданный класс AppWithEvents можно расширить, добавив в него обработчики событий объекта Application. Я приведу пока текст только одного обработчика, который обрабатывает событие NewWorkBook, возникающее при создании новой книги.
Private Sub ExApp_NewWorkbook(ByVal Wb As Workbook)
'Обработка события - создание новой книги.
Static Num As Integer
Num = Num + 1
MsgBox ("Число вновь созданных книг - " & Num _
& vbCrLf & "Новая книга - " & Wb.Name _
& " открыта в " & Time)
End Sub
Пример работает на ура. Создал событие ExApp_WindowResize, вот код:
Код:
Private Sub ExApp_WindowResize(ByVal Wb As Workbook, ByVal Wn As Window)
 Cells(1, 1) = "aaa"
End Sub
Но оно срабатывает (как и раньше) на изменение размеров именно книги внутри приложения excel. А мне нужно отлавливать именно изменение окна приложения excel...
И что еще сложнее, лучше что бы уметь отловить не просто событие "изменение размера окна приложения excel", а два события:
1. Начало изменений размеров окна приложения excel.
2. Завершение изменения размеров окна приложения excel.
С уважением, Алексей.

Последний раз редактировалось tae1980; 11.06.2011 в 19:16.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие OnChange bboyb-rock JavaScript, Ajax 0 18.04.2011 00:07
Событие на F1 fet87 Общие вопросы Delphi 3 31.05.2010 14:10
Событие vitamin.rulez Помощь студентам 7 10.02.2009 11:46
Событие terminadoor Общие вопросы Delphi 13 17.07.2008 09:25
Событие maha Общие вопросы Delphi 6 18.06.2008 18:53