只是一個問題,我似乎無法找到答案。將用戶窗體聲明爲對象與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