2016-10-24 4 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 

만약 두 단계로 (TYPENAME (계속) = "확인란") 그리고 (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는 부울 값을 단락시키지 않기 때문입니다 다. 따라서 cont.TypeName <> "CheckBox"인 경우에도 표현식은 해당 컨트롤이없는 컨트롤의 .Value 속성을 계속 쿼리하려고 시도합니다.

+1

이 답변은 트릭을 수행하므로 답변을 추가하지 않겠습니다. 예를 들어 레이블에는 'Value' 속성이 없으므로 오류가 발생합니다. 편집 : 그리고 user3598756 지금 해결되었습니다. :) –

+0

그것은 일했다, 고마워! 내가 두 단계로 나눌 때 왜 효과가 없는지 아십니까? –

+0

덕분에 @ DarrenBartrup-Cook –

관련 문제