我真的有东西在这里挣扎。我有一个类模块,我们称之为FormMan其中有一堆与大量用户窗体我有我的项目的方法。一个具体方法是从许多不同的地方的调用,并且是非常简单的 - 它简单地增加的控制,以一个形式的用户定义的编号,并延伸的形式高度以适应这些新的控制

在用户通过控件的数目和用户窗体。

oF.AddControlsToForm iNumberOfControls,frmTest

在FormMan类模块:

Public Sub Addcontrols(iNum as integer, oForm as userform)

//stuff happens here, oForm is used extensively

oForm.Height = i  //object does not support this property or method
frmTest.Height = i //works

oForm.Show //object does not...
frmTest.show  //works

end sub

在本地窗口,oForm不具有高度属性,因此很公平。但oForm已被定义为frmTest。我可以说oForm.BackColor = vbred,我可以设置例如ctl = oform.TextBox1

这意味着是能够一堆控件添加到任何形式的通用过程。我试着加载和显示其分配给oForm前的形式。

为什么声明为用户窗体对象的高度和显示属性和用户窗体的方法,但不?我在做什么错了?

真的得到任何帮助。

有帮助吗?

解决方案

这里的问题是,用户窗体和frmTest对象是同一类型的不。事实上,frmTest是通过添加Height属性,除其他部件延伸它的用户窗体的子类型。

您很有可能要诉诸声明你的函数参数作为对象。

Public Sub Addcontrols(iNum as integer, oForm as Object)

这应该工作,你的愿望,但不幸的是你会牺牲类型安全。最OO概念倾向于散架在VBA的情况下。

其他提示

在事情首先要记住VBA是它的准OO,不是完全面向对象的。我碰到了很多解决此问题古怪的问题,所以我现在倾向于避免完全依靠VBA的一致性依赖。

这就是说,尝试了这一点:

Dim fname = oForm.Name (or whatever the property is for this subobject)
With VBA.UserForms.Add(fname)
   .Height = x
   .Show
End With

是不是那么愉快离奇?!?!我没有一个代码示例准备和等待,所以我不能保证成功,但这种感觉就像是正确的做法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top