2017-02-23 12 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

あなたはすべてのコントロールの上に3回ループしているので、すべてのコールの色が変化しますすべてのコントロールに対して。変数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 - イベントにあなたの関数の呼び出しを置きます。