2017-02-24 8 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

BTW에서 코드가 폼의 코드 숨김이면 '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 

당신은 당신의 프로젝트에 대한 모든 형태의 함수를 호출 할 수 있습니다 : 나는 F에 대한 초기 바인딩을 사용하는 방법이 생각

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

,하지만 당신이 VBE에 대한 참조를 추가 할 필요가 당신의 프로젝트를 테스트 할 수 없으므로 내 컴퓨터에서이 작업을 수행 할 수 없습니다. 아마도 마법 유형 번호 3 (= 형식)에 대해 상수가 정의되어있을 수도 있습니다.

+0

이게 내가 찾고있는 것, 특히 내 프로젝트의 모든 양식에 대해 함수를 호출 할 수있는 능력이지만 Set d = frm.designer가 "Object does not support this property or method."오류를 내고 있다고 생각합니다. 어떤 아이디어? – mjcallen

+0

사실, 작동하도록했습니다. 이것은 완벽 해. 감사! – mjcallen