-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

これについて助けてくれてありがとう!

4

1 に答える 1

1

あなたは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 (=forms) にも定数が定義されています。

于 2017-02-24T16:35:32.840 に答える