Страницы: 1
RSS
Модуль класса для кнопок на рабочем листе., Модуль класса для кнопок на рабочем листе.
 
Всем добрый день!

Возникла проблема с модулями классов, я их только начинаю изучать. Требуется создать событие возникающее при щелчке по кнопке, расположенной на рабочем листе(т.к. их будет очень много, а макрос будет однотипный). Пробовал сам поэкспериментировать, но ничего не получается. Файл во вложении, заранее спасибо.
 
В вашем случае кнопки выступают как фигуры. Тут даже классы не нужны. Всем кнопкам присвоить один макрос, и уже в этом макросе перебирать циклом кнопки.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал:
и уже в этом макросе перебирать циклом кнопки.
кхе, кхе. Application.Caller!!!
По вопросам из тем форума, личку не читаю.
 
Попробуйте заменить кнопки на элементы ActiveX, и все получится
в модуль листа (при активации листа выполняется заполнение переменной класса)
Код
Option Explicit
Dim btn(100) As New clsmButts

Private Sub Worksheet_Activate()
    Dim i&, shp As Object
    For Each shp In Me.OLEObjects
        If TypeOf shp.Object Is MSForms.CommandButton Then Set btn(i).CmndBut = shp.Object
        i = i + 1
    Next shp
End Sub

в модуль класса
Код
Option Explicit
Public WithEvents CmndBut As MSForms.CommandButton

Private Sub CmndBut_Click()
    MsgBox ("Нажато!!!")
End Sub
"Все гениальное просто, а все простое гениально!!!"
 
БМВ, правильно. Тоже вспомнил потом про этот метод.
Пример во вложении

Nordheim, Я бы вообще забыл в новых офисах про ActiveX. Уж слишком с ними много проблем на листах.
Изменено: Alemox - 04.09.2019 22:11:41
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал:
про ActiveX. Уж слишком с ними много проблем на листах.
и что с ними не так?
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
что с ними не так?
Миш, несколько раз наблюдал картину, когда клик по кнопке не вызывает событие :)
 
Цитата
Alemox написал:Я бы вообще забыл в новых офисах про ActiveX.
Я бы вообще работал с формой, а не городил кнопки на листе, ни к чему они там. Да и как пользователь не люблю кнопки на листах. А вызов формы сделал бы с помощью RibbonXML.  И все бы было по человечески, а то открываешь лист с таблицей и взрыв мозга кучей кнопок, да еще когда их разукрасят разными цветами. Но это лично мое мнение, может кому то и нравится кликать кнопки именно на листе.  ;)
Изменено: Nordheim - 05.09.2019 08:08:22
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, тогда Access ущербный получится :-).
По вопросам из тем форума, личку не читаю.
 
Доброе время суток.
Цитата
Юрий М написал:
клик по кнопке не вызывает событие
Может его - обработчика события просто не было? Кнопку переименовали, а метод обработчика события - нет, например. Хотя, в общем и целом, соглашусь - зачем элементы интерфейса на рабочем листе?
Изменено: Андрей VG - 05.09.2019 08:50:27
 
Ну если нет возможности в не ущербном Access, то лучше в ущербном, чем с кучей кнопок на листе, что и будет судя по
Цитата
IADmitriy написал:
т.к. их будет очень много,
Повторюсь, это лично мое мнение. Ну не нравятся мне использование кнопок для обработки процедур. Да и классы из картинок не сделаешь, что ну очень не удобно. По сути кнопки на листе, это еще более ущербный Access  :D
Изменено: Nordheim - 05.09.2019 08:56:04
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Юрий М написал:
несколько раз наблюдал картину, когда клик по кнопке не вызывает событие
да фиг бы с ним. Я уже три раза наблюдал картину, когда после очередного обновления ActiveX просто глючат: все ассоциации событий слетают и даже их корректное переназначение ничего не решает, пока не пофиксить все дело руками через удаление определенных файлов офиса или ожиданием офф.фикса проблемы от Microsoft.
При этом даже если починить фиксом - не факт что само собой все заработает, возможно события надо будет все же переписывать.
Изменено: Дмитрий(The_Prist) Щербаков - 05.09.2019 08:56:09
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
после очередного обновления ActiveX просто глючат
Дмитрий, спасибо за информацию. Никогда не использовал, но мало ли...
 
Цитата
Андрей VG написал:
Никогда не использовал
да я тоже, в общем-то :) Но мои заказчики нет-нет да грешат самопальными кодами, где прям никак не хотят без этих элементов :)
При этом есть в них еще глюк в новых версиях: если открыть файл с таким элементом(созданным на другом ПК), что-то изменить в его свойствах, сохранить и закрыть, то при последующем открытии с разрешенными макросами файл просто крашится. Помогает только удаление ВСЕХ ActiveX элементов на листе.

Поэтому я не рекомендую использовать эти элементы никому. Впрочем, не я один: Microsoft тоже настоятельно рекомендует их не применять, ибо устарели они морально и технически. А оставлены они лишь для обратной совместимости с предыдущими версиями...
Изменено: Дмитрий(The_Prist) Щербаков - 05.09.2019 09:04:18
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Off
Цитата
Юрий М написал:
клик по кнопке не вызывает событие
Цитата
Дмитрий(The_Prist) Щербаков написал:
после очередного обновления ActiveX просто глючат: все ассоциации событий слетают и
Как хорошо, что с формулами такого нет :-)
По вопросам из тем форума, личку не читаю.
 
Alemox, попробую тогда использовать Ваш метод. Выглядит гениально просто. Большое спасибо.
 
Андрей VG, мне просто поставили задачу по написанию макроса, чтобы при нажатии кнопки формировалось письмо с адресатом в той же строке, и определённым текстом также указанным в одной из колонок.  
 
Андрей VG, Дмитрий(The_Prist) Щербаков, Юрий М, Nordheim, БМВ, Alemox, Все большое спасибо за помощь и просвещение в пути реализации!
 
Цитата
IADmitriy написал:
чтобы при нажатии кнопки формировалось письмо с адресатом в той же строке
ууух, это же сколько кнопок будет на листе, может проще создать событие листа при котором если кликнули по ячейке с адресом письмо и сформировалось (можно с вопросом нужно ли это письмо формировать или нет)? Хотя кнопочки наверно привычней для пользователя.
"Все гениальное просто, а все простое гениально!!!"
 
IADmitriy, можно всем ответить в одном сообщении. Если не увидели до создания сообщения - вернулись и отредактировали.
 
Коллеги, спасибо за содержательную и аргументированную дискуссию!
Владимир
 
По поводу глюков элементов ActiveX было написано и рассказано много тем, не говоря уже про эту тему. Дмитрий в принципе ответил на вопрос, почему не надо использовать. Я сам сколько раз из-за этих кнопок на листе страдал. Но некоторые до сих пор их упорно используют, но видимо до случая. Постоянное исправление FM20 и удаление EXD файлов не всегда приносят результатов. Иной раз приходится удалять все кнопки с листов и заменять их фигурами.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
Страницы: 1
Наверх