Как обновить элементы GUI/UserForm с помощью событий уровня приложения?Excel

Ответить Пред. темаСлед. тема
Гость
 Как обновить элементы GUI/UserForm с помощью событий уровня приложения?

Сообщение Гость »

Проблема:
Я хочу обновить 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 так поступает со мной?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Excel»