vba - 我可以实现一个包含特定用户窗体的公共成员变量的接口吗?
问题描述
我已经成功创建了一个用户窗体,它实现了一个可以显示警告工具提示的界面(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 文件即可实现此目的。
解决方案
推荐阅读
- python-3.x - 如果匹配开始和停止字符串 python 从单个 csv 文件生成新的 csv 文件
- javascript - 如何从依赖包中提取函数并保存在本地?
- javascript - chrome.storage.sync 的替代方案,可以在一个密钥中存储超过 8kb
- hadoop - Databricks 中的 ABFS 驱动程序如何读取 Azure Data Lake 中的 blob?
- json - 如何在 Type Script (Angular 12) 中循环遍历这个 json 数据
- node.js - Azure Blob 存储 SAS ExpireOn 不起作用
- ag-grid - 以编程方式最大化 AG-Grid 集成范围图
- python - 检测组中每个精灵或对象的鼠标点击
- spring-boot - 如何将“上下文初始化期间遇到的异常”视为错误,而不是警告?
- python - 如何从格式不正确的 txt 文件中绘制图形?