VBA表单可以容纳的最大控件数是多少?

时间:2010-04-22 10:01:22

标签: forms vba excel-vba excel-2003 limits

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

我在Google搜索中看到VB6(通常包括VBA)在表单中有254个控件的硬限制。但是,我创建了一个超过1200个控件的虚拟表单,它仍然可以加载并且似乎工作正常。

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

是否有人有任何可能有助于确保我或更重要的是,具有不同环境的其他用户不会遇到如此大型表单的任何内存问题的信息?

4 个答案:

答案 0 :(得分:4)

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

我不知道上限是什么,但它将是绝对限制或可用资源强加的限制,所以如果你可以添加1,200而不遇到其中任何一个& excel在内存使用方面表现得很好,你应该没问题。

也就是说,这个控件的数量似乎仍然很多,一次呈现给用户!

答案 1 :(得分:3)

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

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

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

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

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

答案 2 :(得分:2)

没有硬性规则......


VBA没有明确数量的控件限制你 它完全取决于您运行它的系统。

作为一般经验法则:

  • 减少控件数量。
  • 使用网格控件而不是按钮数组。
  • 将其拆分为逻辑形式,以进一步简化。
  • 使用lightweight controls(无控制控件),因为它们占用的内存较少。

除此之外,如果您仍然在屏幕上使用超过100个控件(正如您所说的那样),那么您为该项目聘请了一个新的UI设计师。

古德纳克!!

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


更新:下面有一些供您参考的内容......

  

答案 3 :(得分:0)

我试图远离那么大的用户形式。我更喜欢使用电子表格来处理这么大的事情的数据收集。如果存在依赖关系,则根据需要隐藏/取消隐藏行,或使用多个工作表。我觉得这是一个更容易的解决方案(有时)。