Страницы: 1
RSS
Запуск макроса при изменении ListBox
 
Доброго времени суток, уважаемые форумчане. Скажу сразу, нынешний вопрос уже имеет решение, мне просто хочется узнать имеется ли другое. Итак, на форме есть листбокс с прописанным содержанием:
Код
Me.Service_macros.List = Array("восс-е исходных значений ДИ", "восс-е контекст. меню листа", "визуал-я 1 строки прихода", "отображение скрытых имен")
Задумывался запуск нужного макроса при его выборе, макросы разумеется сформированы и находятся в отдельном модуле. Сначала я попытался сделать это так:
Код
Private Sub Service_macros_Change()
    ad = Array(Func_RecNM, Func_RecCM, Func_RecViz, Func_ShowImen)(Service_macros.ListIndex)
End Sub
потом Choose, потом Switch, но всегда в этих случаях получалось одно и тоже: макросы запускались все по очереди (можно убедиться в прилагаемом примере выбрав любой макрос, а отработают все, что неприемлемо для меня). Я так понимаю, что согласно логике кода встроенных функций, они проверяют правильность всех вариантов, при этом запуская их в данном случае. Решением стало использование Select Case:
Код
Private Sub Service_macros_Change()
    Select Case Service_macros.ListIndex
         Case 0: ad = Func_RecNM
         Case 1: ad = Func_RecCM
         Case 2: ad = Func_RecViz
         Case 3: ad = Func_ShowImen
     End Select
End Sub
Повторюсь, все работает, просто хотелось бы знать, можно ли было решить вопрос иначе
Заранее спасибо всем откликнувшимся
 
Код
Private Sub UserForm_Initialize()
    Me.Service_macros.List = Array("восс-е исходных значений ДИ", "восс-е контекст. меню листа", "визуал-я 1 строки прихода", "отображение скрытых имен")
End Sub

Private Sub Service_macros_Change()
    ad = Array("Func_RecNM", "Func_RecCM", "Func_RecViz", "Func_ShowImen")(Service_macros.ListIndex)
    Application.Run ThisWorkbook.Name & "!" & ad
'    Select Case Service_macros.ListIndex
'         Case 0: ad = Func_RecNM
'         Case 1: ad = Func_RecCM
'         Case 2: ad = Func_RecViz
'         Case 3: ad = Func_ShowImen
'     End Select
End Sub
 
Я бы делал чуть иначе. Заполняем листбокс так:
Код
Private Sub UserForm_Initialize()
    Dim am, xm, ad, lr&
    am = Array("восс-е исходных значений ДИ", "восс-е контекст. меню листа", "визуал-я 1 строки прихода", "отображение скрытых имен")
    ad = Array("Func_RecNM", "Func_RecCM", "Func_RecViz", "Func_ShowImen")
    For Each xm In am
        Me.Service_macros.AddItem xm
        Me.Service_macros.List(lr, 1) = ad(lr)
        lr = lr + 1
    Next
End Sub
'и просто при изменении берем нужный макрос из второго столбца Листбокса
Private Sub Service_macros_Change()
    ad = Service_macros.List(Service_macros.ListIndex, 1)
    Application.Run "'" & ThisWorkbook.Name & "'!" & ad
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
МатросНаЗебре, спасибо за отклик, но ваш код проявляет свою "неправильность" так же как и мой уже на 6 строке, можно закомментировать 7 строку, попытаться вызвать любой макрос и отработают все 4. Увы.
 
Дмитрий(The_Prist) Щербаков, а вот ваш код работает как задумывалось, спасибо большое за пример решения
 
Цитата
написал:
код проявляет свою "неправильность" так же как и мой уже на 6 строке
Не выглядит правдоподобным. Покажите, пжста, файл после внесённых изменений.
 
МатросНаЗебре, приношу извинения, но почему-то при первой проверке вашего кода отработалось с указанной "неправильностью", не знаю почему. А вот теперь, когда формировал файл по вашей просьбе и проверил, все сработало как надо. Еще раз извините за критику.

P.S. кстати понял почему не получилось с первого раза, я не заметил того, что вы закавычили имена макросов и оставил сначала свою строку
Изменено: OlegO - 20.01.2026 19:47:28
 
Цитата
OlegO написал:
на форме есть листбокс
А никого не смутило что нет на форме данного контролла? В который раз читаю пост стартовый от OlegO и не могу понять, где у него на форме данный контролл?
Изменено: MikeVol - 20.01.2026 21:33:45
 
А теперь я немного не понял, MikeVol. В прилагаемом файле есть лист, на нем здоровенная кнопка, нажатие на которую запускает UserForm с искомым ListBox. Мог бы конечно на открытие файлы повесить запуск UserForm или на двойной или правый клик, но какая разница? Или вы не это имели ввиду?
 
Цитата
написал:
извините за критику.
Нет проблем. Ошибки - это наша рутина )
Цитата
написал:
я не заметил того, что вы закавычили имена макросов и оставил сначала свою строку
Именно такое у меня и было предположение, когда я попросил выложить код.
 
Цитата
OlegO написал:
запускает UserForm с искомым ListBox
У Вас там ComboBox, а не ListBox. Об этом речь.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
У Вас там ComboBox, а не ListBox
Теперь дошло, но это просто описка, извините на невнимательность
Страницы: 1
Читают тему
Наверх