2016-11-21 10 views
1

私はVBAのフォームを使って私の単語の文書を作成しています。私は一緒に勉強しています。リストから項目を選択できるコンボボックスがあります。基本的には、「Homestretch」項目が選択されている場合は4つのコピーを、コンボボックスに選択または入力されたものはすべて3つのコピーで印刷します。IfとElseIf Statement in VBA

Homestretchを選択すると4つのコピーが完全に印刷されますが、他のものを選択すると印刷されません。また、これはコマンドボタンクリック機能の下にあり、ckbPrintチェックボックスがチェックされている場合にのみ実行します。以下にコードを示します。ありがとう。

If Me.ckbPrint.Value = True Then 
If cbxCarrier.Value = "Homestretch" Then 
    ActiveDocument.PrintOut copies:=4 
ElseIf cbxCarrier.Value <> "Homestretch" Then 
ElseIf Me.ckbPrint.Value = True Then 
    ActiveDocument.PrintOut copies:=3 
End If 
End If 

答えて

2

ELSEIF作品。次にこれを簡素化することができます:あなたはちょうど2つの値のいずれかを割り当てる間で決定する必要があり、単純なIf ... Then例については

Dim copies As Long 

If Me.ckbPrint Then 
    If cbxCarrier.Value = "Homestretch" Then 
     copies = 4 
    Else 
     copies = 3 
    End If 
    ActiveDocument.PrintOut copies:=copies 
End If 
+0

明示的な '{bool-expression} = True'テストを避けることを誇りに思っていますが、デフォルトメンバの' ckbPrint'の値に頼っていますが、 'cbxCarrier.Value'を明示的にチェックしてください。私は 'If Not Me.ckbPrint.Value Then Exit Sub'で早めに救済し、インデントレベルを削除します。 upvoteは 'ActiveDocument.PrintOut'複製を削除します。よくできました! –

+0

ありがとう!これは完全に機能し、ここで何が起こっているのかを理解するのは非常に簡単です。私はちょうどそれを思っていたと思う。再度、感謝します! – Christopher

0

それはそれはあなたが望むものではない場合だけでステートメントを変更するには、この

If Me.ckbPrint.Value = True Then 
    If cbxCarrier.Value = "Homestretch" Then 
     ActiveDocument.PrintOut copies:=4 
    ElseIf cbxCarrier.Value <> "Homestretch" Then 
     'put your inner else statement here. If none, then remove it 
    End If 
ElseIf Me.ckbPrint.Value = False Then 'this else is connected with first if 
ActiveDocument.PrintOut copies:=3 
End If 

のように見えるものでなければならその方法であれば、あなたのコードは、あまりにも多くのテストを適用している

+0

[インデントがないために]わかりにくいですが、OPのコードでは、[Not Me.ckbPrint.Value'のときには何も印刷されません。 –

0

、式IIf()関数は、あなたのコードを簡単にすることができます。

If Me.ckbPrint Then ActiveDocument.PrintOut _ 
    copies:=IIf(cbxCarrier.Value="Homestretch", 4, 3) 

構文:IIf(test, if_test_true, if_test_false)

+0

著者によれば、彼は初心者です。いくつかの説明を追加して、コードラインがなぜ役立つのでしょうか? – reporter