Class VBA用户窗体对象
我真的有点纠结。我有一个类模块,我们称之为FormMan,它有一系列与我的项目中的大量用户表单相关的方法。一个特殊的方法是从许多不同的地方调用,非常简单——它只需向表单添加用户定义数量的控件,并扩展表单高度以适应这些新控件 用户传递控件数和userformClass VBA用户窗体对象,class,vba,ms-office,userform,Class,Vba,Ms Office,Userform,我真的有点纠结。我有一个类模块,我们称之为FormMan,它有一系列与我的项目中的大量用户表单相关的方法。一个特殊的方法是从许多不同的地方调用,非常简单——它只需向表单添加用户定义数量的控件,并扩展表单高度以适应这些新控件 用户传递控件数和userform oF.AddControlsToForm iNumberOfControls,frmTest 在FormMan类模块中: Public Sub Addcontrols(iNum as integer, oForm as userform)
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之前,我尝试加载并显示表单
为什么将userforms的height和show属性和方法声明为userforms,而不是将对象声明为userforms?我做错了什么
非常感谢您的帮助。这里的问题是UserForm和frmTest对象的类型不同。事实上,frmTest是UserForm的一个子类型,它通过在其他成员中添加Height属性来扩展它 您可能不得不将函数参数声明为对象
Public Sub Addcontrols(iNum as integer, oForm as Object)
这应该按照您的意愿工作,尽管不幸的是您将牺牲类型安全性。在VBA环境中,大多数OO概念往往会分崩离析。这里的问题是UserForm和frmTest对象的类型不同。事实上,frmTest是UserForm的一个子类型,它通过在其他成员中添加Height属性来扩展它 您可能不得不将函数参数声明为对象
Public Sub Addcontrols(iNum as integer, oForm as Object)
这应该按照您的意愿工作,尽管不幸的是您将牺牲类型安全性。大多数OO概念在VBA的上下文中往往会分崩离析。关于VBA,首先要记住的是它是准OO,而不是完全OO。我在这个问题上遇到了很多奇怪的问题,所以我现在倾向于避免完全依赖VBA的一致性 尽管如此,请尝试以下方法:
Dim fname = oForm.Name (or whatever the property is for this subobject)
With VBA.UserForms.Add(fname)
.Height = x
.Show
End With
这不是很奇怪吗?!?!我没有现成的代码示例,因此我不能保证成功,但这似乎是正确的方法。关于VBA,首先要记住的是它是准OO,而不是完全OO。我在这个问题上遇到了很多奇怪的问题,所以我现在倾向于避免完全依赖VBA的一致性 尽管如此,请尝试以下方法:
Dim fname = oForm.Name (or whatever the property is for this subobject)
With VBA.UserForms.Add(fname)
.Height = x
.Show
End With
这不是很奇怪吗?!?!我没有现成的代码示例,因此我不能保证成功,但这似乎是正确的方法。在开始这个项目之前,我做了很好的调整。谢谢你的帮助,没问题!随着时间的推移,我已经学会了热爱VBA,如果b/c Excel是一个非常强大的应用程序背景的话。在我开始这个项目之前,我已经做了很好的调整。谢谢你的帮助,没问题!随着时间的推移,我已经学会了热爱VBA,如果b/c Excel是一个非常强大的应用程序背景的话。