Проблема:
Я хочу обновить ComboBox/TextBox, когда я открываю книгу или щелкаю ячейку в другой книге. Я пришел к желанию передать функцию классу для выполнения. Потому что это кажется наиболее правдоподобным способом. VBA меня просто сбивает с толку.
Почему? Я пишу макрос с графическим интерфейсом, которому необходимо открыть информационную книгу (Info-WB) для суммирования выбранного диапазона листов в другой книге (S-WB). . И я хочу в реальном времени отображать, открыт ли Info-WB или нет, а затем элементы графического интерфейса должны реагировать на выбор листов (и ячеек в нем) в S-WB, как с помощью пипетки.
Что я пробовал:
Я прочитал это, и это похоже на решение, но я не совсем его понял: https://stackoverflow.com/questions/531 ... and-enable
Я думаю, это то, что мне нужно: https://stackoverflow.com/questions/198 ... ith-events https://bettersolutions.com/vba/events/ ... events.htm Я понимаю, что мне нужно, чтобы склеить события с классом:
Public WithEvents oProgressFormClassInstance As clsProgressForm 'Здесь WithEvents подразумевает, что всякий раз, когда конкретный объект, на который ссылается эта переменная 'вызывает событие, оно запускает обработчик событий для этого события в этом классе (форме) Но как мне на самом деле использовать класс с событиями, поскольку класс VBA создает для меня, когда я создаю меню с помощью IDE?
Я также нашел на этом сайте вопрос, указывающий на использование Application.Run внутри класса, имеющего обработчик событий. Итак, наконец, я подумал о том, чтобы сохранить элементы пользовательского интерфейса и имя функции как переменную в этом классе и таким образом передать их событию. Но то, как я изучал программирование (с использованием Lua), кажется слишком запутанным и хакерским.
Класс обновления:
Public WithEvents appevent как приложение 'Реализует ComboBox'...можно мечтать Открытая функцияName As String Публичный элемент uiElement как вариант Частный Sub appevent_WorkbookOpen (ByVal Wb As Workbook) Application.Run updateSomeIUStuff Конец субтитра Частный подкласс_Initialize() Установите Me.appevent = Приложение Конец субтитра РЕДАКТИРОВАТЬ: добавлено «Установить» в «Me.appevent = Приложение»
Код в пользовательской форме:
Частная подгруппа UserForm_Initialize() Dim uUpdater как вариант Установить uUpdater = Новое средство обновления Конец субтитра Дополнительное обновлениеSomeIUStuff() MsgBox «Если маминой сумочке не место в микроволновой печи, то почему она поместилась?» 'ComboBox.doStuff() Конец субтитра Теперь по какой-то причине VBA говорит: переменная объекта или переменная блока не определена. и указывает мне на «Me.appevent = Приложение»
Мне это кажется неправильным, помимо того, что оно не работает. Почему Microsoft так поступает со мной?
Как обновить элементы GUI/UserForm с помощью событий уровня приложения? ⇐ Excel
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение