5

我目前正在构建一个 Excel 2003 应用程序,该应用程序需要一个极其复杂的表单,并且担心控件数量的限制。它目前有 154 个控件(使用计数Me.Controls.Count- 这应该是准确的,对吗?)但可能只完成了大约三分之一。工作流程确实适合单个表单,但我想如果我真的需要,我可以将其拆分。

我在 Google 搜索中看到证据表明 VB6(这通常包括 VBA)在一个表单中具有 254 个控件的硬性限制。但是,我创建了一个带有 1200 多个控件的虚拟表单,这些控件仍然可以加载并且看起来工作得很好。

不过,在尝试添加特定控件组合时,我确实遇到了一些“内存不足”错误,比如 800 个按钮和 150 个标签,这让我认为任何限制都可能受到每种控件的内存要求的影响。

有没有人有任何信息可以帮助确保我或更重要的是,具有不同环境的其他用户不会在如此大的表格中遇到任何内存问题?

4

4 回答 4

4

大多数 MSForms 控件是无窗口的(因为它们不是真正的窗口,而是由 VBA 表单引擎直接绘制为图形对象),相比之下它们是“轻量级的”。这意味着与在 VB6 表单上使用等效的非 MSForms 控件相比,您可以将更多内容转储到 Userform 上。

我不知道上限是什么,但它要么是绝对限制,要么是可用资源施加的限制,所以如果你可以添加 1,200 而不会遇到其中任何一个,并且 excel 在内存使用方面表现自己应该没事。

也就是说,要立即向用户展示的控件数量似乎仍然很多!

于 2010-04-22T10:30:31.757 回答
3

表单上控件的最大数量没有硬性限制。正如另一个答案中提到的,这将根据您的硬件、Excel 版本和操作系统而有所不同。

可悲的是,我在构建带有太多控件的 VBA 表单方面经验丰富。:(

我可以说,一旦超过 200 个控件,您可能会开始注意到一些奇怪/间歇性的事件/错误。

我完全通过反复试验发现的一件事是,通常用于保存单选按钮组的 Frame 控件似乎比任何其他控件引起的问题更多。如果我创建没有任何 Frame 控件的表单,我可以在遇到麻烦之前在该表单上获得更多控件。

我发现无论您需要多少控件,它们通常都可以分为不同的组。如果一个特定的组或类别将包含十几个控件(包括标签),最好为该类别设置一个可以启动子表单的按钮。这确实有助于降低主窗体的复杂性。

于 2010-04-22T12:43:40.363 回答
2

没有硬性和软性规则...


VBA 将限制您使用的控件数量没有确定。
它完全取决于您运行它的系统。

作为一般经验法则:

  • 减少控件的数量。
  • 使用网格控件而不是按钮数组。
  • 将其拆分为逻辑形式以进一步简化。
  • 使用轻量级控件(无句柄控件),因为它们消耗的内存更少。

除此之外,如果您仍在屏幕上使用 100 多个控件(如您所说),那么您是时候为该项目聘请新的 UI 设计师了。

祝你好运!!

PS:如果可能,请尝试拆分表格。
我无法想象使用任何可以在一个屏幕上显示 154 个控件的软件。
(MS-WORD 非常接近 ;-))


更新:下面的一些东西供您参考...

于 2010-04-22T10:11:34.750 回答
0

我尽量远离这么大的用户表单。我更喜欢使用电子表格来处理这么大的事情的数据收集。如果存在依赖关系,那么我会根据需要隐藏/取消隐藏行,或者使用多个工作表。我发现这是一个更简单的解决方案(有时)。

于 2010-04-22T15:37:24.140 回答