在 VBA 中创建自定义类 UI

在 VBA 中创建自定义类 UI

在 VBA 中,UserForm 只是一个自定义类(带有一些事件和属性),并带有内置用户界面。我也想创建一个带有内置用户界面的自定义类,只是它与 userforms 使用的不是同一个。

例如,假设我想制作一个计算器用户界面。我需要一些图像元素作为计算器背景和按钮,一些文本框作为屏幕,然后一些按钮元素用于监听用户点击。然后我以某种方式将这些链接到一个类,该类包含所有事件监听器和初始化/关闭代码,以使 GUI 真正出现

我的问题是,如果我想设计这样的东西,我该从哪里开始?

方法

我能想到的一种方法是这样的(在 Excel 中):

  • 在图像编辑器中设计界面的外观
  • 将各种元素导出为单独的图片文件,并将它们保存到隐藏工作表的某个位置
  • 在 VBA 中创建一个类,其中包含将各种图像元素拼凑在一起的代码,即将每个图像元素放置在相对于彼此的预先指定的位置
  • 拼凑剩下的交互的部分(按钮、输出文本框等)使用 activeX 控件,这些控件是不可见的并且位于其各自的图像元素上
  • 使用我的类中的事件监听器初始化这些控件

我可以相对轻松地做到。但它有以下我能想到的关键限制:

问题*

  1. 就事件而言,我被限制在 ActiveX 控件默认具有的事件中

因为我的方法是通过图像元素构建界面,从 VBA 的角度来看,这些将是Shape对象(以支持透明度 - 圆边 - 因为 activeX 图像控件不支持这一点)。这些不会引发任何事件,所以如果我想检测,比如说,当用户将鼠标悬停在计算器框架上时,我要么用不可见的 activeX 标签覆盖它,要么进行 API 调用来查看鼠标在做什么。第一种对于复杂的形状是不可行的,后者会增加一大堆额外的复杂性。理想情况下,我希望有某种方式来从我可用的列表中指定哪些元素引发哪些事件。

  1. 在运行时调整大小/重新设计

如果我的界面是由图像元素构建的,那么我无法在运行时轻松更改设计。如果说,我想调整 GUI 的框架元素的大小,那么标准光栅格式图像 (png、jpeg 等) 将变得模糊,矢量图像 (Excel 现在对其提供有限的支持) 默认情况下没有这样的规则If the frame height is changed, stretch the sides but do not stretch the toolbar at the top。更改元素的颜色也是我想要支持的功能,但这很难用图像来实现,recolor这是一个选项,但仅适用于 MSPublisher。

  1. 内存/文件大小

我的界面中的大部分图形元素可能都是相当简单的设计。从文件大小来看,矢量图像格式比光栅格式更适合,但 ActiveX 控件不支持将其作为背景。因此,相对于添加到用户窗体的简单按钮,文件大小会增加,并且可能会引入一些延迟。

*nb 这些仅用于上下文,所以如果你愿意可以跳过,或者如果需要我可以进一步详细说明它们

结论

我不想使用用户表单,因为它们已经有一些固定的界面——框架、矩形形状、特定元素的特定事件监听器。我可能会设计我想要的之内用户窗体,但就外观而言,我想要一个空白画布。我确信一定有更好的方法来设计自定义界面,以便像用户窗体一样使用 VBA 类进行控制?

我隐约觉得 Visual Studio 可能有用,但我甚至不知道要搜索什么教程。到目前为止,我只能找到有关 Windows 窗体(我不想要它,原因与我不想要用户窗体相同)或 Excel 插件(它与 Excel 交互,但似乎没有自己的可自定义界面)的说明。两者都不是我想要的,所以我认为我需要先找一个人来理解问题并给我指明正确的方向。

相关内容