Проблема:
Я хочу обновить 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
1697184556
Гость
[b]Проблема:[/b]
Я хочу обновить ComboBox/TextBox, когда я открываю книгу или щелкаю ячейку в другой книге. Я пришел к желанию передать функцию классу для выполнения. Потому что это кажется наиболее правдоподобным способом. VBA меня просто сбивает с толку.
Почему? Я пишу макрос с графическим интерфейсом, которому необходимо открыть информационную книгу (Info-WB) для суммирования выбранного диапазона листов в другой книге (S-WB). . И я хочу в реальном времени отображать, открыт ли Info-WB или нет, а затем элементы графического интерфейса должны реагировать на выбор листов (и ячеек в нем) в S-WB, как с помощью пипетки.
[b]Что я пробовал:[/b]
Я прочитал это, и это похоже на решение, но я не совсем его понял: https://stackoverflow.com/questions/53123046/implementing-a-change-event-to-check-for-changes-to-textbox-values-and-enable
Я думаю, это то, что мне нужно: https://stackoverflow.com/questions/19860901/update-form-with-events https://bettersolutions.com/vba/events/excel-application-level-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 так поступает со мной?
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия