首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA UserForm对象

VBA UserForm对象
EN

Stack Overflow用户
提问于 2009-02-12 21:04:17
回答 2查看 6.3K关注 0票数 1

我真的很纠结于这里的一些事情。我有一个类模块,我们称它为FormMan,它有一堆与我的项目中的大量用户表单相关的方法。一种特殊的方法是从许多不同的地方调用,而且非常简单-它只需将用户定义的控件数量添加到窗体中,并扩展窗体高度以适应这些新控件。

用户传递控件的数量和用户表单。

代码语言:javascript
复制
oF.AddControlsToForm iNumberOfControls,frmTest

在FormMan类模块中:

代码语言:javascript
复制
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没有height属性,因此足够公平。但是oForm被定义为frmTest。例如,我可以说oForm.BackColor = vbred,我可以设置ctl = oform.TextBox1

这是一个泛型过程,可以向任何表单添加一组控件。在将表单分配给oForm之前,我已经尝试过加载和显示表单。

为什么高度和显示属性和方法是用户表单而不是对象声明为用户表单?我做错了什么?

真的很感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-12 21:17:16

这里的问题是UserForm和frmTest对象不是同一类型。实际上,frmTest是UserForm的一个子类型,它通过添加Height属性和其他成员来扩展它。

您可能不得不将函数参数声明为Object。

代码语言:javascript
复制
Public Sub Addcontrols(iNum as integer, oForm as Object)

这应该可以如您所愿地工作,尽管不幸的是,您将牺牲类型安全性。大多数面向对象的概念在VBA的上下文中往往会分崩离析。

票数 4
EN

Stack Overflow用户

发布于 2009-02-12 21:20:51

关于VBA,首先要记住的是它是准面向对象的,而不是全面向对象的。我在这个问题上遇到了很多奇怪的问题,所以我现在倾向于避免完全依赖VBA的一致性。

话虽如此,你可以试试这个:

代码语言:javascript
复制
Dim fname = oForm.Name (or whatever the property is for this subobject)
With VBA.UserForms.Add(fname)
   .Height = x
   .Show
End With

这不是很奇特吗?!?!我没有现成的代码示例等待,所以我不能保证成功,但感觉这是正确的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/543243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档