只是一个问题,我似乎无法找到答案。将用户窗体声明为对象与MSForms.Userform之间的区别?
我正在编程创建一个用户窗体,我发现如果我声明我的对象为“MSForms.Userform”类型,似乎没有办法设置高度和宽度,因为这些属性不存在,insideheight/insidewidth是只读属性。
我发现的是,如果我将其声明为泛型类型“对象”,我可以设置高度和宽度属性并按照我的意愿使用它。
所以,以后我初始化对象,我查了当地人窗口和差异似乎是:
- 当类型“对象”将初始化类型的实例“UserForm1” 声明
- 当类型“MSForms.Userform”,宣布它将初始化类型“窗体”的一个实例
所以我的问题是,是什么在使用不同的申报statments区别?
谢谢!
编辑:添加了一些示例代码,以便您可以看到如何声明不同的方式时,对象的行为是不同的。当您导入组件到项目
Sub TestUserForm()
'NOTE: You need to add a reference to Microsoft Visual Basic
' for Applications Extensibility 5.3
'Declare variables
Dim oForm As MSForms.UserForm
Dim oForm1 As Object
Dim oComp As VBComponent
Dim oComp1 As VBComponent
'Create new form objects in the VBA project programmatically
Set oComp = Application.VBE.ActiveVBProject.VBComponents.Add(ComponentType:=vbext_ct_MSForm)
Set oComp1 = Application.VBE.ActiveVBProject.VBComponents.Add(ComponentType:=vbext_ct_MSForm)
'Initailize an object of each new form
Set oForm = VBA.UserForms.Add(oComp.Name)
Set oForm1 = VBA.UserForms.Add(oComp1.Name)
'Compare what happends when trying to set the width and height properties
With oForm1 'This works
.Height = 200
.Width = 100
End With
With oForm1 'This does not work
.Properties("Width") = 100
.Properties("Height") = 200
End With
With oForm 'This does not work
.Height = 200
.Width = 100
End With
With oForm 'This does not work
.Properties("Width") = 100
.Properties("Height") = 200
End With
'Remove the forms from the project
Application.VBE.ActiveVBProject.VBComponents.Remove oComp
Application.VBE.ActiveVBProject.VBComponents.Remove oComp1
End Sub
'UserForm1'是UserForm'的'特定实例,并且只在您的VBA项目的存在。类似于'Sheet1'和'Worksheet' – 2014-10-16 16:08:59
蒂姆,我想我明白你在说什么,但仍然困惑于声明对象类型的差异。我在原始问题中添加了一些示例代码,以便您可以看到我在说什么。 – CBRF23 2014-10-16 19:42:11
不同之处在于,至少有一部分是当你将它声明为一个对象时VB不会试图验证它的类型。你不明智,正如你看到它可以改变你如何访问属性。当你声明某种类型的东西时,VB会获得关于该类型的信息,并为你提供intellisense中的属性和方法。它也会阻止你将oForm设置为不是UserForm的东西。 – jac 2014-10-16 20:24:11