Vba 什么';UserForm.Caption有什么问题吗?

Vba 什么';UserForm.Caption有什么问题吗?,vba,userform,caption,Vba,Userform,Caption,有VBA编码经验的人能解释一下这种疯狂吗 Dim thisForm As MSForms.UserForm Set thisForm = ACADProject.FormENU 'FormENU is user form I have, with some controls in it, 'with a little piece of data in the caption so that it's visible 'when the form is shown 'When I do t

有VBA编码经验的人能解释一下这种疯狂吗

Dim thisForm As MSForms.UserForm

Set thisForm = ACADProject.FormENU 
'FormENU is user form I have, with some controls in it, 
'with a little piece of data in the caption so that it's visible
'when the form is shown

'When I do this
Debug.Print thisForm.Caption
'I get ""

'When I do this
Debug.Print thisForm.Controls(1).Parent.Caption
'I get the actual caption of the Form
为什么这个表单在我向它的一个控件请求之前不知道它的标题?
我正在以调用嵌套在模块中的过程的形式从命令按钮执行此操作

这似乎是由于基类的属性未正确映射到子类属性的错误造成的

ACADProject.FormENU
继承自
MSForms.UserForm
。它的属性和方法比
MSForms.UserForm
多得多,但是它
MSForms.UserForm
,因此它可以存储在
MSForms.UserForm
类型的变量中

似乎内部
MSForms.UserForm
及其子类(用户设计的实际用户表单)被实现为不同的对象,其中基本虚拟对象的属性返回实际派生对象返回的任何属性(这使得从上面的链接看它更像是has-a,而不是is-a).
如果映射了
MSForms.UserForm
的所有属性以返回实际子类的相应值,则可能会忘记映射
Caption
属性:

Dim FormAsSelf作为UserForm1
Dim FormAsForm作为MSForms.UserForm
作为对象的对象
Set FormAsSelf=New UserForm1
设置FormAsForm=FormAsSelf
设置FormAsObject=FormAsSelf
Debug.Print“Caption from self:”,FormAsSelf.Caption,TypeName(FormAsSelf),ObjPtr(FormAsSelf),TypeOf FormAsSelf是UserForm1
Debug.Print“来自表单的标题:”,FormAsForm.Caption,TypeName(FormAsForm),ObjPtr(FormAsForm),TypeOf FormAsForm是UserForm1
Debug.Print“Caption from object:”,FormAsObject.Caption,TypeName(FormAsObject),ObjPtr(FormAsObject),TypeOf FormAsObject为UserForm1
自卸车
标题 说明文字 类型名 对象地址 是
用户表单
? 赛尔夫的说明: 用户表单1 用户表单1 4144272 真的 表格标题: 用户表单1 96261568 真的 来自对象的标题: 用户表单1 用户表单1 4144272 真的
您确定这是excel、word和其他office产品使用的vba,而不是visual studio中使用的VB.net吗?可能只有一个用户可以在excel中复制类似的行为。这是因为
将此窗体设置为MSForms.UserForm
,并由
将此窗体设置为ACADProject.FormENU
固定的,但我不知道为什么。似乎不是罪魁祸首,因为相同的行为通过正确的
设置thisForm=New ACADProject.FormENU
重现。不,发生这种情况是因为
将thisForm设置为MSForms.UserForm
。这是否回答了您的问题?