Я получаю несоответствие типов, так как вызов флажка возвращает его состояние вместо всего объекта.Есть ли способ получить весь объект?
Неправильное предположение, что вы получаете «весь объект», но объект, который вы получаете, не реализует ожидаемый интерфейс,следовательно, несоответствие типов .
Вам необходимо явно квалифицировать типы 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](https://i.stack.imgur.com/pUOyt.png)
Это невероятно трудно обнаружить в ванильном VBE.С Rubberduck вы просто помещаете каретку на CheckBox
и она сообщает вам, откуда она идет:
![Excel checkbox](https://i.stack.imgur.com/ZvtGw.png)
![MSForms checkbox](https://i.stack.imgur.com/wfw7v.png)
Без каких-либо надстроек вам, скорее всего, придется угадать фактического типа, потому что Shift + F2 (что обычно приводит вас к определению в Object Browser ) для этого бесполезен - все, что вы получаете, это сообщение «идентификатор под курсором не распознан».
Отказ от ответственности: я управляю открытым исходным кодом Rubberduckпроект.