2016-10-24 9 views
0

チェックボックス付きの "questionario"というフォームを作成し、すべてのCheboxが空白の場合はmsg文を送信するIF文を作成しました。しかし、マクロを実行すると、引用符で囲まれた行にエラー(エラー438)が発生します。この行には何が起こっていますか?

Private Sub CommandButton1_Click() 

Dim ind As Integer 
Dim cont As MSForms.Control 
ind = 0 

If questionario.resp1.Value = True Then 
Range("E8").Value = Range("E8").Value + 1 
End If 
If questionario.resp2.Value = True Then 
Range("F8").Value = Range("F8").Value + 1 
End If 
If questionario.resp3.Value = True Then 
Range("G8").Value = Range("G8").Value + 1 
End If 


For Each cont In questionario.Controls 

場合は2つのステップに(型名(続き)= "チェックボックス")と(cont.Value =真)次に

ind = ind + 1 

End If 
Next 


If ind = 0 Then 
MsgBox "mmm" 
Else 
questionario.Hide 
Set questionario = Nothing 
End If 

End Sub 
+0

もし 'cont.TypeName = ...'をやってみることができますか? – nbayly

+0

私は試してみましたが、問題は 'And(cont.Value = True)'部分にあると思います。 –

答えて

2

除算あなたのチェック:

For Each cont In questionario.Controls 
    If TypeName(cont) = "CheckBox" Then 
     If cont.Value Then '<-- a checkbox control has a Value property 
      ind = ind + 1 
      Exit For '<-- no need to go on 
     End If 
    End If 
Next 

これは、一部のコントロールタイプに.Valueプロパティがなく、VBAがshort-circuit boolean expreシオンズ。したがって、cont.TypeName <> "CheckBox"であっても、式はそのような特性を持たないコントロールの.Valueプロパティをクエリしようとします。

+1

この回答はトリックですので、私は答えとして追加しません。例えば、ラベルには 'Value'プロパティがないので、エラーがスローされます。編集:とuser3598756は、今それに対処しています。 :) –

+0

働いて、ありがとう!私が2つのステップに分かれないときになぜそれがうまくいかないのか分かりますか? –

+0

ありがとう@ DarrenBartrup-Cook –

関連する問題