2017-02-24 30 views
-1

ユーザーフォームを開くボタンがクリックされるたびにコードを実行するのではなく、コードを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]パラメータを削除し、[昨日のように](http://stackoverflow.com/a/42421855/1188513)の代わりに「Me」を使用してください。 'FormatUserForms UFNewRequest'は**デフォルトインスタンス**を送信しています。**は必ずしも現在実行中のインスタンスではありません**。 –

+2

ちょうど好奇心から、フォームのストアドバイナリストリームのコントロールプロパティを変更したいのですか?それらを動的に設定すると、フォームの読み込みに最小限のオーバーヘッドが追加され、 'TextBox'バックグラウンドカラーをカップルシェードライターにする必要がある場合、***柔軟性と保守性が向上します。 – Comintern

答えて

0

あなたは2つのことをミックスしています。 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

これは私が探しているもの、特に私のプロジェクトのすべてのフォームの関数を呼び出すことができると思いますが、Set d = frm.designerは "オブジェクトがこのプロパティまたはメソッドをサポートしていません"というエラーを表示しています。何か案は? – mjcallen

+0

実際、それは働くようになった。これは完璧です。ありがとう! – mjcallen

関連する問題