設置: 我有很多項目,很多用戶窗體,和雙顯示器系統上打開這些時,默認StartUpPosition爲1 = CenterOwner它會出現在主顯示屏的右側(Windows桌面的中心)。我正在嘗試編寫一小段代碼來更改項目中每個用戶窗體的一個屬性。在這種情況下,具體而言,.StartUpPosition = 2(中心屏幕)變化StartUpPosition在項目錯誤:對象不支持物業
使用Microsoft Office Professional Plus 2010的
我已經知道如何使用VBA的屬性編輯器,Positions.StartUpPosition下改變StartUpPosition。問題是這麼多的項目中有這麼多的用戶窗體,我想一次性在每個項目上更改它們。最終,我想通過使用方法的重載參數(FormName,Property,Value)來使用相同的代碼來更改任何屬性。現在,我只需要一個人來處理StartUpPosition即可。
當我運行此代碼時,打開用戶窗體時,它按預期工作,覆蓋StartUpPosition = 1(CenterOwner)的默認值,並在屏幕中心顯示窗體。
Sub UserForm_Initialize()
With UserFormName
.StartUpPosition = 2 'CenterScreen'
End With
End Sub
然而,當我運行它嵌入在這個循環中循環通過從模塊項目的控制,試圖改變一切形式的違約一次,我碰到下面的錯誤。
錯誤:運行時錯誤'438': 對象不支持此屬性或方法。
Sub UserFormStartUp_Center()
Dim VBComp As Object
'For each control in project'
For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
'Check to see if control is a UserForm'
If VBComp.Type = 3 Then '3 = vbext_ct_MSForm'
'Change Property - StartUpPosition - SAME AS ABOVE'
With VBComp
.StartUpPosition = 2 'CenterScreen'
End With
End If
'Loop through controls'
Next
End Sub
問:我怎樣才能設置該屬性的形式被存儲爲默認值,而不僅僅是在運行時的情況下,除了進入每個用戶窗體,並通過向下滾動到手動更改該屬性並點擊它,然後關閉表單並轉到下一個重複。 (是的,我現在已經完成了,但是當我學習新技術時,我有很多項目需要更改用戶窗體,我需要爲客戶端修補其他項目)
我有這種感覺關於我不明白的運行時間。我必須相信,你可以通過程序設置這個屬性,因爲它將它與其他屬性一起存儲。
研究:
MSDN: StartUp Object Property 根據MSDN,在運行時纔對象可以啓動對象。
MSDN: StartUpPosition Property
預先感謝您有這方面的幫助。這將節省我許多小時的點擊。
編輯:添加以下內容,閱讀後回答:
UPDATE:當我運行與你們每個人在答覆中提到的建議的代碼,我仍然得到一個錯誤。運行時錯誤:'-2147467259(80004005)'對象'_VBComponent'的方法'屬性'失敗。
所以我決定嘗試一些東西出來,像打印屬性項..值,名稱的一個MsgBox等
For Each VBComp In ActiveWorkbook.VBProject.VBComponents
'~~> Check to see if control is a UserForm'
If VBComp.Type = 3 Then
With VBComp
MsgBox (VBComp.Properties.Item(50).Value)
End With
End If
Next
當我做到這一點,這很有趣。出現消息框,其正確的信息與該項目的本地窗口匹配。然後,在msgbox之後,它給出對象錯誤。如果這是一個錯誤,那麼爲什麼消息框會正確輸出?就好像UserForm是一個對象,但Property.Item不是。然而,它具有可如名稱,值等包含在該屬性項目,其中對象類型=無
你幾乎在正確的軌道上。讓我發表一個答案:) – 2014-11-01 13:10:56