首页 > 解决方案 > 我可以实现一个包含特定用户窗体的公共成员变量的接口吗?

问题描述

我已经成功创建了一个用户窗体,它实现了一个可以显示警告工具提示的界面(https://youtu.be/8dvWjXgVpxk)。当所有用户表单、模块和类都位于一个公共项目中时,它工作得很好,但现在我想获取接口并将其存储在另一个项目中,然后我可以通过创建引用在许多不同的项目中重用它(工具-> 参考)。不幸的是,当我传输接口和此接口用作成员变量的用户窗体时,我收到编译错误:“私有对象模块不能在公共对象模块中用作公共过程的参数或返回类型,作为公共数据成员,或作为公共用户定义类型的字段。” 错误信息

我现在在这几天苦苦挣扎,找不到合适的方法。

简化的代码结构

主要项目:
模块:UFManager:

Sub CATMain()
    UFThatHasTooltip.Show
End Sub

用户表单:UFThatHasTooltip:

Implements ICanShowTooltip

Private Sub UserForm_Click()
    Debug.Print "click!"
End Sub

外部项目:

类/接口:ICanShowTooltip:

Public myTooltip As UFTooltip

用户表单:UFTooltip

'empty

我认为主要问题是由于用户表单 UFTooltip 被认为是私有的,因此不能以任何形式被任何作为公共的东西使用。我知道如何解决这个问题,而不是用户表单,我想使用一个类作为接口的成员变量(通过将类的“实例化”属性从“1 - Private”更改为“2 - PublicNotCreatable” ),但我找不到将其行为更改为“公共”的用户表单的属性。

PS。我知道用户表单 UFThatHasTooltip 缺少使用接口所需的一些属性定义,但编译器甚至没有去关心它,所以我现在忽略了它们。

编辑:我已成功导出 UFTooltip 的 .frm 文件,编辑属性 VB_Exposed 并将其值设置为 True。这有助于解决最初的问题,所以我进一步开发了代码并将其放在一个仓库中: https ://github.com/hwnd-git/VBA-Interface-Sandbox 现在我想知道是否有办法无需导出用户表单并编辑其 .frm 文件即可实现此目的。

标签: vbainterfaceuserformpubliccatia

解决方案


推荐阅读