2017-02-24 80 views
-1

我正在嘗試永久更改用戶窗體,以便我只需運行一次代碼而不是每次單擊按鈕以打開用戶窗體時都會運行該代碼。永久更改用戶形式

我發現這適用於某些人。我不確定對我來說可能是錯的。

Sub FormatUserForms(UF As UserForm) 

UF.BackColor = RGB(51, 51, 102) 
Dim ctrl As Control 

With ThisWorkbook.VBProject.VBComponents("UFNewRequest").Designer 
    For Each ctrl In UF.Controls 
     Select Case TypeName(ctrl) 
      Case "Label" 
       ctrl.BackColor = RGB(51, 51, 102) 
       ctrl.ForeColor = RGB(247, 247, 247) 
      Case "CommandButton" 
       ctrl.BackColor = RGB(247, 247, 247) 
       ctrl.ForeColor = RGB(0, 0, 0) 
      Case "TextBox" 
       ctrl.BackColor = RGB(247, 247, 247) 
       ctrl.ForeColor = RGB(0, 0, 0) 
      Case "OptionButton" 
       ctrl.BackColor = RGB(51, 51, 102) 
       ctrl.ForeColor = RGB(247, 247, 247) 
     End Select 
    Next 
End With 
End Sub 

Sub formatting() 

FormatUserForms UFNewRequest 

End Sub 

感謝您的任何幫助!

+0

那麼,什麼是問題? –

+0

順便說一句,如果代碼在窗體的代碼隱藏中,放棄'UF'參數並使用'Me',而不是[如昨天告訴](http://stackoverflow.com/a/42421855/1188513)。 'FormatUserForms UFNewRequest'正在發送**默認實例**,它**不一定是當前正在執行的實例**。 –

+2

出於好奇,爲什麼要更改表單的存儲二進制流中的控件屬性?動態設置它們會爲表單加載增加非常小的開銷,並且如果您決定'TextBox'背景顏色需要變得更輕一些,那麼它將更加靈活和可維護。 – Comintern

回答

0

你在混合兩件事。這是使用ThisWorkbook.VBProject.VBComponents("UFNewRequest").Designer對象的正確軌道,但您沒有使用它。相反,您的代碼在作爲參數傳遞的表單上工作 - 這隻會在運行時才起作用。

Sub FormatUserForm(frm As Object) 

Dim d As UserForm 
Set d = frm.Designer 

d.BackColor = RGB(51, 51, 102) 

Dim ctrl As Control 
For Each ctrl In d.Controls 
    Select Case TypeName(ctrl) 
      (...) 
    End Select 
Next ctrl 

End Sub 

您可以調用該函數用於各種形式的項目:

Dim f As Object 
For Each f In ThisWorkbook.VBProject.VBComponents 
    If f.Type = 3 Then 
     Call FormatUserForm(f) 
    End If 
Next f 

我想有使用早期的F結合的方式,但你必須一個參考VBE添加到您的項目,我不能在我的電腦上這樣做,所以我無法測試。可能有一個常量定義爲魔法類型數字3(=表單)也

+0

我想這是我正在尋找的,尤其是能夠調用我的項目上的所有窗體的函數,但設置d = frm.designer給我的錯誤「對象不支持此屬性或方法。」有任何想法嗎? – mjcallen

+0

其實,它得到它的工作。太棒了。謝謝! – mjcallen