2017-02-23 26 views
0

我試圖格式化我的每個用戶窗體上的控件,但是我的格式是用戶窗體上的所有控件而不是僅僅是標籤或僅僅是文本框。格式化用戶表單控件

以下是我有:

Private Sub UserForm_Initialize() 

FormatUserForms UFNewRequest 

End Sub 

Sub FormatUserForms(UF As UserForm) 

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

For Each Label In UF.Controls 
    Label.BackColor = RGB(51, 51, 102) 
    Label.ForeColor = RGB(247, 247, 247) 
Next 

For Each Button In UF.Controls 
    Button.BackColor = RGB(247, 247, 247) 
    Button.ForeColor = RGB(0, 0, 0) 
Next 

For Each TextBox In UF.Controls 
    TextBox.BackColor = RGB(247, 247, 247) 
    TextBox.ForeColor = RGB(0, 0, 0) 
Next 

End Sub 

這種類型的我想要做什麼的,但對於每一個每一個覆蓋上。無論如何都要在用戶表單中劃定控件以便它們不被覆蓋?

此外,每次我打開我的,然後關閉我的用戶窗體,我得到一個「內存不足」的錯誤。幫助與此將不勝感激!謝謝。

回答

3

我沒有檢查,但「內存不足」的錯誤是最有可能關係到其自身的Initialize過程中使用UserForm的默認實例:

FormatUserForms UFNewRequest 

你不應該這樣做(並不需要)。您可以隨時使用Me獲取表單的參考。我會完全刪除它。至於該控件,您可以撥打TypeName要弄清楚它是什麼類型的控制,然後用Select Case給他們相應的格式:

Private Sub UserForm_Initialize() 
    FormatUserForms 
End Sub 

Sub FormatUserForms() 
    Me.BackColor = RGB(51, 51, 102) 
    Dim current As Control 

    For Each current In Me.Controls 
     Select Case TypeName(current) 
      Case "Label" 
       current.BackColor = RGB(51, 51, 102) 
       current.ForeColor = RGB(247, 247, 247) 
      Case "CommandButton" 
       current.BackColor = RGB(247, 247, 247) 
       current.ForeColor = RGB(0, 0, 0) 
      Case "TextBox" 
       current.BackColor = RGB(247, 247, 247) 
       current.ForeColor = RGB(0, 0, 0) 
    Next 
End Sub 
+0

感謝您的支持。它看起來像TypeName和Select Case是我需要解決這個問題。 – mjcallen

1

您遍歷所有控件的三倍,所以每一個電話改變顏色爲所有控件。命名變量Textbox不會過濾僅用於文本框的控件。 你必須使用TypeName(ctrl)分離控件類型:

For Each ctrl In u.Controls 
    If TypeName(ctrl) = "TextBox" Then 
     ctrl.BackColor = ... 
    ElseIf TypeName(ctrl) = "Label" Then 
     ctrl.BackColor = ... 
    Else 
     ... 
    End If 
next ctrl 

據我看到的,這隻有當形式是開放的,所以就把調用你的函數進入UserForm_Initialize - 活動。