Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание панели инструментов, в Outlook 2003 
V
    Опции темы
mihanik
Дата 12.10.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Привет всем.

Сижу-торможу.

В аутлуке динамически создаю собственную панель инструментов и вешаю на неё кнопку.
Никак не могу заставить аутлук что-либо сделать при клике по моей кнопке...

Вот код.

Код

Public Sub Application_Startup()

' Ищем среди панелей инструментов панель с именем "Mihanik"

For Each MyPanel In Application.ActiveWindow.CommandBars
    ' Если такая панель найдена, то удалим её.
    ' А то вдруг она "старая"!!!
    If MyPanel.Name = "Mihanik" Then MyPanel.Delete
Next MyPanel

' Создаём около правой границы активного окна панель с именем "Mihanik"
Set MyPanel = Application.ActiveWindow.CommandBars.Add("Mihanik", 1, False, True)
' Делаем панель видимой
MyPanel.Visible = True

' Создаю на моей панели кнопку...
Set MyButton = MyPanel.Controls.Add(msoControlButton, 1, "Start", 1, True)
MyButton.Caption = "Start!"
MyButton.FaceId = 2
MyButton.OnAction = "lala_click"

End Sub


Public Sub lala_click()
    MsgBox "Ты нажал на мою кнопку!!!"
End Sub



По идее команда 
MyButton.OnAction = "lala_click"
определяет имя функции или процедуры, которая должна будет выполняться при клике по кнопке.

В хелпе пишется, что 

Цитата

Returns or sets the name of a Visual Basic procedure that will run when the user clicks or changes the value of a command bar control. Read/write String.

Note  The container application determines whether the value is a valid macro name.


Что делаю не так?


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Exception
Дата 12.10.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Цитата

Note  The container application determines whether the value is a valid macro name.


Это ты сюда должен написать имя макроса, написанного на VBA smile .

А так ты должен объявить WithEvents эту переменную и использовать её события smile .
PM   Вверх
mihanik
Дата 12.10.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Цитата(Exception @  12.10.2006,  17:53 Найти цитируемый пост)
Это ты сюда должен написать имя макроса, написанного на VBA  .


Дык...
Вроде пишу...


Цитата

...
MyButton.OnAction = "lala_click"

End Sub


Public Sub lala_click()
    MsgBox "Ты нажал на мою кнопку!!!"
End Sub



Цитата(Exception @  12.10.2006,  17:53 Найти цитируемый пост)
А так ты должен объявить WithEvents эту переменную и использовать её события  . 


А поподробнее можно?  smile 



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Aloha
Дата 12.10.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 2
Всего: 165



mihanik

Провел небольшое расследование. Вот такие результаты:

Excel
Код работает с заменой
Application_Startup() на Workbook_Open()
.ActiveWindow.CommandBars на .CommandBars

но, при этом Public Sub lala_click() должна быть обязательно в обычном модуле (а не в модуле класса). В противном случае возникает ошибка.

Word
Код работает с заменой
Application_Startup() на Document_Open()
.ActiveWindow.CommandBars на .ActiveDocument.CommandBars

при этом если Public Sub lala_click() лежит не в обычном модуле, а в модуле класса ThisDocument, то все равно все работает (что для меня совершенно удивительно).

Outlook
Код работает, если Public Sub lala_click() лежит в обычном модуле (а не в ThisOutlookSession). В противном случае код не работает, но ошибка (как в Excel) не возникает.

Так что мне кажется, что проблема не в коде, а в том где "живут" его части.


Это сообщение отредактировал(а) Aloha - 12.10.2006, 20:00
PM   Вверх
mihanik
Дата 12.10.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Цитата(Aloha @  12.10.2006,  19:56 Найти цитируемый пост)
обязательно в обычном модуле 


Спасибо!
Я тоже параллельно пришёл к тому же выводу... 

Разместил следующий код в отдельном модуле, а StartMyMacros вызываю из класса модуля ThisOutlookSession.

Ну... Не фонтан, но так меня тоже устраивает!

Код

Sub StartMyMacros()

Dim MyPanel As CommandBar            ' моя панель инструментов...
Dim MyButton As CommandBarButton

' Ищем среди панелей инструментов панель с именем "Mihanik"

For Each MyPanel In ActiveWindow.CommandBars
    ' Если такая панель найдена, то удалим её.
    ' А то вдруг она "старая"!!!
    If MyPanel.Name = "Mihanik" Then MyPanel.Delete
Next MyPanel

' Создаём около правой границы активного окна панель с именем "Mihanik"
Set MyPanel = ActiveWindow.CommandBars.Add("Mihanik", 1, False, False)
' Делаем панель видимой
MyPanel.Visible = True

' Создаю на моей панели кнопки...
Set MyButton = MyPanel.Controls.Add(msoControlButton, 1, "Start1", 1, True)
MyButton.Caption = " About Me  "
MyButton.OnAction = "AboutMe"

Set MyButton = MyPanel.Controls.Add(msoControlButton, 1, "Start2", 1, True)
MyButton.Caption = " Settings...  "
MyButton.OnAction = "SettingsMe"

Set MyButton = MyPanel.Controls.Add(msoControlButton, 1, "Start3", 1, True)
MyButton.Caption = " Stop!  "
MyButton.OnAction = "StopMe"

Set MyButton = MyPanel.Controls.Add(msoControlButton, 1, "Start4", 1, True)
MyButton.Caption = " Start!  "
MyButton.OnAction = "StartMe"

' Делаем панель видимой
MyPanel.Visible = True

End Sub



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.