Страницы: 1
RSS
Контроль событий ComboBox, Контроль нажатия кнопок ComboBox без привязки к листу на котором он создан.
 
Подскажите пожалуйста, возможно ли контролировать события изменения ComboBox без привязки к листу на котором он создан?
Есть пример решения, хотелось бы вынести процедуру Private Sub TempCombo_KeyDown с модуля листа (Июнь в примере) на котором создан этот ComboBox. Но перенос его в модуль книги по аналогии с контролем события листа ни чего не дает:( А может я не смог задать правильный вопрос Google :(
Так, при активации столбцов B, D, F вызывается ComboBox и надо обработать потом события.
 
Нет. Я бы просто посоветовал в таком случае использовать пользовательскую форму, вместо объекта. Тогда привязки к листу не будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Игорь, это же событийная процедура, а она только на листе с контролом отслеживается.
 
А вариант Димы (с формой) - в самый раз.
 
The_Prist, Дима, это наверно будет следующий вопрос :D  есть у меня наброски решения, но их пока нельзя выложить на форум :evil: Там сделан Комбо на форме, но возникают другие вопросы... Пока не разобрался. Хочу Форму с 1 Комбо по размеру формы и позиционированием по Target с дальнейшей обработкой Комбо на форме. Там пока еще читаю и пробую...
 
Igor67, возможно подойдёт вариант с классом?

код модуля класса
Код
Option Explicit
Public WithEvents CbEvent As ComboBox

Private Sub CbEvent_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    MsgBox True
End Sub

код книги
Код
Option Explicit
Dim CbEvents As New cl_CBEvents

Private Sub Workbook_Open()
    Dim sh As Worksheet
    Dim cb As MSForms.ComboBox
    Dim objTmp As OLEObject
    
    For Each sh In Worksheets
        For Each objTmp In sh.OLEObjects
            If TypeOf objTmp.Object Is MSForms.ComboBox Then
                Set cb = objTmp.Object: Exit For
            End If
        Next
    Next
    
    Set CbEvents.CbEvent = cb
End Sub
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
В похожих ситуациях я отказался от выпадающих списков и делаю все на контекстном меню( при условии, что список не совсем огромный конечно)
Спасибо
 
Игорь, Юрий М выкладывал как-то код активации формы по onkey. Я в одном из своих проектов использовал его.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("C:C")) Is Nothing Then
        Application.OnKey "~"
        Application.OnKey "{ENTER}"
    Else
        Application.OnKey "~", "ShowForm"
        Application.OnKey "{ENTER}", "ShowForm"
    End If
End Sub
Sub ShowForm()
    UserForm2.Show 0
End Sub
На форме комбобокс. Код привязан к листу, но с тем же успехом можно вязать к любому событию книги. Однако гемор еще тот :) надо не забыть при деактивации книги сбрасывать онкей, а при активации восстанавливать.
Я сам - дурнее всякого примера! ...
 
я как то выкладывал на форуме этот пример, посмотри может почерпнешь идею.
Спасибо
 
Спасибо всем за оклики. LightZ, попробую Ваш вариант через модуль класса.
В принципе я знаю решение - не техническое, а организационное :D  
Делаем все на 1 листе (и код значительно уменьшится) типа ввод текущих на листе с макросами, и еще добавляем перенос месячных данных (уже введенных) в данном случае в виде архивных листов с данными без формул и пр...
Но, нормальные герои всегда идут в обход (с)
 
В общем, кажется получилось то, что хотел. Вариант решения в этой теме в сообщении от 30 Июн 2013 17:53:36 файл ...версия 1_1.
R Dmitry, вариант интересный, но данных оочень много для него. Это подойдет максимум до 20 значений.
KuklP, этот вариант решения вероятно будет следующим. Сейчас мне не актуально.
Еще раз спасибо всем за поддержку  :)
Изменено: Igor67 - 30.06.2013 18:17:42
 
Вариант с модулем класса помог?
Т.к. толком не тестил, но должно работать без ошибок.
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
LightZ, да, именно его и реализовал. Были затыки по незнанию, но разобрался :D
 
Богдан, видишь ли - делать класс - ИМХО из пушки по воробьям. Но ИМХО.  Пусть еще ребята выскажутся... Я всегда сторонник упрощенного подхода.
Я сам - дурнее всякого примера! ...
 
Привет, Сереж.
К сожалению, в данной ситуации (именно с КомбоБоксами на листе) - я не вижу другого варианта кроме класса :)
А идеи с ЮзерФормами и тд - это уже из другой "оперы" :)
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
соглашусь  :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
Igor67 пишет:
R Dmitry,  вариант интересный, но данных оочень много для него. Это подойдет максимум до 20 значений.
Если данных много то их можно группировать.
Например, у деклараций есть дата, соответственно можно группировать по году, месяцу и т.д. Также можно группировать по фирме, декларанту и т.д.
-----------
Но конечно все зависит от конечного пользователя, если ему удобней внести код, то конечно лучше использовать комбобокс.
Спасибо
Страницы: 1
Наверх