Установите CheckBox Control dim в качестве пользовательской формы CheckBox - PullRequest
2 голосов
/ 09 июля 2019

Я пытаюсь создать модуль класса, который строится поверх элемента управления checkbox.В модуле класса я хочу указать на флажок в пользовательской форме.Хотя, когда я пытаюсь заполнить объект CheckBox одним из флажков в пользовательской форме, я получаю несоответствие типов, так как вызов флажка возвращает его состояние вместо всего объекта.Есть ли способ получить весь объект?

Я пробовал

set myCheckBox = makeMyCheckBox(Me.CheckBox1)

и

set myCheckBox = makeMyCheckBox(Me.CheckBox1.Object)

, где makeMyCheckBox - это функция, которая принимает объект CheckBox исоздает новый объект MyCheckBox.

'Within my userform's code

Dim myCheckBoxes(1 to 2) As MyCheckBox 'MyCheckBox is my class module

Private Sub UserForm_Initialize()
set myCheckBoxes(1) = makeMyCheckBox(me.CheckBox1)'<--Error Type Mismatch
End Sub

Private Function makeMyCheckBox(c As CheckBox) As MyCheckBox 
Dim myChck As MyCheckBox 
Set myChck = New MyCheckBox 
myChck.init c 'takes in a CheckBox and fills its internal CheckBox object
Set makeMyCheckBox= myChck 
End Function

Я ожидаю, что Me.CheckBox1 будет объектом CheckBox.Me.CheckBox1 выводит состояние флажка, когда я смотрю в отладке (true / false)

Я получаю-- Ошибка времени выполнения '13': Несовпадение типов

1 Ответ

1 голос
/ 09 июля 2019

Я получаю несоответствие типов, так как вызов флажка возвращает его состояние вместо всего объекта.Есть ли способ получить весь объект?

Неправильное предположение, что вы получаете «весь объект», но объект, который вы получаете, не реализует ожидаемый интерфейс,следовательно, несоответствие типов .

Вам необходимо явно квалифицировать типы MSForms с помощью библиотеки MSForms, например:

Private Function makeMyCheckBox(ByVal c As MSForms.CheckBox) As MyCheckBox 

В противном случае неквалифицированное CheckBoxимя идентификатора / типа ссылается на Excel.CheckBox, поскольку объектная модель хост-приложения (библиотека Excel) всегда имеет более высокий приоритет, чем указанная библиотека MSForms, в диалоговом окне проектные ссылки :

Microsoft Excel 16.0 object library showing before Microsoft Forms 2.0 object library

Это невероятно трудно обнаружить в ванильном VBE.С Rubberduck вы просто помещаете каретку на CheckBox и она сообщает вам, откуда она идет:

Excel checkbox

MSForms checkbox

Без каких-либо надстроек вам, скорее всего, придется угадать фактического типа, потому что Shift + F2 (что обычно приводит вас к определению в Object Browser ) для этого бесполезен - все, что вы получаете, это сообщение «идентификатор под курсором не распознан».

Отказ от ответственности: я управляю открытым исходным кодом Rubberduckпроект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...