2017-06-21 7 views
-2

VBAコードでif関数を繰り返す方法こんにちは、すべて私はフォーム上でifを使ってコマンドラインを作成します。しかし、私はそれを何度も繰り返し書くことができません。この執筆を簡略化する適切な方法はありますか?VBAの関数ifループ

If UserForm1.checkbox15.Value = True Then 
UserForm2.textbox1.enable = True 
UserForm2.textbox1.BackColor = RGB(200, 200, 200) 
Else 
UserForm2.textbox1.enable = True 
UserForm2.textbox1.BackColor = RGB(255, 255, 255) 
End If 

If UserForm1.checkbox16.Value = True Then 
UserForm2.textbox2.enable = True 
UserForm2.textbox2.BackColor = RGB(200, 200, 200) 
Else 
UserForm2.textbox2.enable = True 
UserForm2.textbox2.BackColor = RGB(255, 255, 255) 
End If 

If UserForm1.checkbox17.Value = True Then 
UserForm2.textbox3.enable = True 
UserForm2.textbox3.BackColor = RGB(200, 200, 200) 
Else 
UserForm2.textbox3.enable = True 
UserForm2.textbox3.BackColor = RGB(255, 255, 255) 
End If 

If UserForm1.checkbox18.Value = True Then 
UserForm2.textbox4.enable = True 
UserForm2.textbox4.BackColor = RGB(200, 200, 200) 
Else 
UserForm2.textbox4.enable = True 
UserForm2.textbox4.BackColor = RGB(255, 255, 255) 
End If 

.... .... .... textbox660に...

+0

これは読めませんので、理解しやすいようにコードをフォーマットしてください。 – GibralterTop

+0

私はあなたがここに貼り付けることを決めたフォーマットされていない混乱を見るまで、私はあなたのコードを書式化しようとしていました。あなたの投稿を編集してください**少なくともそれを正しくフォーマットするために**努力してください。つまり、それはコードダンプの混乱だけです。 –

+0

申し訳ありませんが、コードを投稿するのに問題があります。拒否されたコード私はメモ帳で書いた++その後私はそれをブラウザに貼り付けます。何とか私が編集するたびに拒否されました。 –

答えて

0

は、モジュールの最上部に、サブルーチンのConst外とあなたの色の長い値を定義します。

Public Const bgColorTrue As Long = 13158600 '## RGB(200,200,200) 
Public Const bgColorFalse As Long = 16777215 '## RGB(255,255,255) 

その後、あなたはやや単純化しているが、それでもテキストボックス+のCheckBoxのペアのすべてを列挙する必要があり、このような何かを、行うことができます。

UserForm2.textbox1.BackColor = IIF(UserForm1.checkbox15.Value = True, bgColorTrue, bgColorFalse) 
UserForm2.textbox2.BackColor = IIF(UserForm1.checkbox16.Value = True, bgColorTrue, bgColorFalse) 
UserForm2.textbox3.BackColor = IIF(UserForm1.checkbox17.Value = True, bgColorTrue, bgColorFalse) 
UserForm2.textbox4.BackColor = IIF(UserForm1.checkbox18.Value = True, bgColorTrue, bgColorFalse) 
UserForm2.textbox5.BackColor = IIF(UserForm1.checkbox19.Value = True, bgColorTrue, bgColorFalse) 
' etc... 

又は(チェックボックスのインデックスとテキストボックスの間の算術関係が一定であると仮定して)、あなたがループを実行し、そのチェックボックスとそのテキストボックスのペアを識別するためのサブルーチンを作成することができます。

Dim cb as MSForms.CheckBox, ctrl as Control 
For Each ctrl in UserForm1.Controls 
    If TypeName(cb) = "CheckBox" Then 
     Call UpdateForm2(cb, UserForm2) 
    End If 
Next 

Sub UpdateForm2(ByRef cb as MSForms.CheckBox, byRef Uf as UserForm) 
    Dim tb as MSForms.TextBox 
    Dim iCB as Long, iTB as Long 
    '## Get the index of this CheckBox name: 
    iCB = CLng(Replace(cb.Name, "checkbox", vbNullString)) 
    '## Compute the index of corresponding TextBox name 
    iTB = iCB - 14 
    '## Handle the TextBox on the other UserForm 
    Set tb = Uf.Controls("TextBox" & iTB) 
    tb.BackColor = IIF(cb.Value = True, bgColorTrue, bgColorFalse) 
End Sub 
+0

私が誤ってVBAコードを書いて申し訳ありませんああ、それは次のようになります。 UserForm1.checkbox15.Value = Trueの場合、 UserForm2.textbox1.Locked = Falseの UserForm2.textbox1.BackColor = RGB(255、255、255) その他 UserForm2.textbox1.Locked = True UserForm2.textbox1.BackColor = RGB(200,200,200) 終了の場合等 私はそれをテストし、成功しました。テキストボックス機能を有効にするコマンドを追加するのを忘れただけです。 あなたのアドバイスはとても明るく、応募することができます。すべてをありがとう –

関連する問題