题
我真的有东西在这里挣扎。我有一个类模块,我们称之为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
是不是那么愉快离奇?!?!我没有一个代码示例准备和等待,所以我不能保证成功,但这种感觉就像是正确的做法。
不隶属于 StackOverflow