Страницы: 1
RSS
Для чего у CommandButton свойство OnAction?
 
Мяв!
Ковыряясь с кнопками, обнаружил, что CommandButton имеет свойство OnAction.
Правда добраться до него не удается.
Вопрос - для чего это свойство у данного элемента?
 
RAN, хм Андрей. https://msdn.microsoft.com/ru-ru/vba/office-shared-vba/articles/commandbarbutton-onaction-property-office
По вопросам из тем форума, личку не читаю.
 
Цитата
RAN написал:
Ковыряясь с кнопками
Андрей, а можно подробнее что за кнопки? Это кнопки панели, кнопки формы, еще какие-то?
По идее это свойство доступно только у контролов CommandBar и у Shape(фигур).
Изменено: Дмитрий(The_Prist) Щербаков - 07.09.2018 10:36:03
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
RAN, Кнопки у Майкрософта по свойствам есть одинаковые, а технологии их реализации(разрисовки) разные.
дабы програмистам было проще, то МС сделал ето для совместимости написания кода разными програмистами.
так как OnAction ето из html.
В Екесель есть такие кнопки как Ribbon. Вот там OnAction используют по полной.
Думаю, направление мысли вам понятен.
Изменено: ivanok_v2 - 07.09.2018 10:44:20
 
Цитата
ivanok_v2 написал:
В Екесель есть такие кнопки как Ribbon. Вот там OnAction используют по полной.
Коллега, разъясните смысл фразы - означает ли это что OnAction для CommandBarButton используются как-то ущербно или вообще не используются?
 
Андрей VG, никакой ущербности там нет.
Просто запустить макрос в обьектах Ribbon можно ТОЛЬКО(то что имел ввиду под фразой "пополной" ;) ) через OnAction.
Изменено: ivanok_v2 - 07.09.2018 11:49:00
 
Кнопка на листе
=ВНЕДРИТЬ("Forms.CommandButton.1";"")
 
RAN,да, значение в OnAction и должно передаватся с типом String, так как ето название процедуры или  функции
 
Цитата
RAN написал:
Кнопка на листе
Только вот OnAction к кнопке имеет опосредованное отношение. Это свойство контейнера, а не MSForms.CommandButton
 
Здравствуйте, коллеги! Согласен с Андреем (#9). В модуль листа:
Код
Sub test()
  Dim v As Shape
  Set v = Me.Shapes(1)
  MsgBox v.OnAction            ' выдает пустую строку 
  v.OnAction = "TestAction"   ' вызывает ошибку
End Sub
Владимир
 
Цитата
sokol92 написал:
Согласен с Андреем (#9). В модуль листа:
Добрый день, Владимир.
Спасибо за поддержку.

P. S. А что, для старожилов правило отписываться в своих темах не действительно?
 
Цитата
Андрей VG написал:
P. S. А что, для старожилов правило отписываться в своих темах не действительно?
:)
Доброе утро.
Андрей, спасибо за разъяснения, в принципе так и предполагал.
Взял паузу в ожидании возможного появления более развернутых ответов.
Но где кончаются контейнеры, и начинается кнопка?
Shape > OnAction
Shape > DrawingObject > OnAction
Shape > OLEFormat > Object > OnAction
 
Цитата
RAN написал:
Shape > OLEFormat > Object > OnAction
Андрей, если воспользоваться кодом Владимира, то
Код
Debug.Print TypeName(v.OLEFormat.Object)
выдаст OLEObject, следовательно OnAction относится к нему. И только следующий Object будет CommandButton
Код
Debug.Print TypeName(v.OLEFormat.Object.Object)
у которого OnAction уже не будет :)  По существу это интерфейсная надстройка над реальным объектом.
Изменено: Андрей VG - 08.09.2018 11:52:19
 
Мой вопрос, собственно, и был вызван макросом, аналогичным #10.
А вот TypeName не поглядел.
Всем Спасибо.
Страницы: 1
Наверх