2017-02-23 4 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과 함께 얻을 수 있습니다. 나는 그것을 완전히 제거 할 것입니다. 그래서 모든 호출은 색상을 변경,

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

을 당신은 모든 컨트롤을 통해 반복하는 세 번 : 컨트롤에 관해서는, 당신은 그것이 제어의 유형을 파악하는 TypeName를 호출 한 다음 적절하게 형식으로 Select Case을 사용할 수 있습니다 모든 컨트롤. 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 - 이벤트에 함수를 호출했습니다.

관련 문제