2016-11-25 52 views
-2

私はユーザフォームを作成していますので、相互に排他的なチェックボックスのグループを作成するか、ユーザが選択できるようにしてください。 "しかし、ただオプションボタンを使用してください!"あなたは泣いている。それには二つの問題:ユーザフォームのチェックボックスを1つだけ選択できるようにする

  1. 私はすでに(私はあなたがすることができます何とかグループにそれら複数のセットを許可するようにと考えているが、私は実際にこれを行う方法に慣れていない午前)ユーザーフォームにオプションボタンの別のセットを持っています。

  2. 私の教授は特にチェックボックス

を望んでいるので、私はこの

If CheckBoxBar.Value = True And CheckBoxatm.Value = True Then 
GoTo Here: 
End If 

If CheckBoxatm.Value = True And CheckBoxmmHg.Value = True Then 
GoTo Here: 
End If 

If CheckBoxatm.Value = True And CheckBoxpsia.Value = True Then 
GoTo Here: 
End If 

If CheckBoxBar.Value = True And CheckBoxmmHg.Value = True Then 
GoTo Here: 
End If 

If CheckBoxBar.Value = True And CheckBoxpsia.Value = True Then 
GoTo Here: 
End If 

If CheckBoxmmHg.Value = True And CheckBoxpsia.Value = True Then 
GoTo Here: 
End If 

のように、この問題を解決しようとここにMSGボックスが言う後に再ユーザーフォームを初期化し、メッセージボックスにつながります「あなたは1つしか選択できません」このようなコードで

Here: MsgBox "You are only allowed to select on pressure unit." 

コードは機能しますが、チェックボックスの1つのみを選択しても、常にHere:ステートメントに移動します。何か間違った点を見つけることができますか

ありがとうございました!

+1

あなたのコードに 'HERE'ラベルの前に' Exit Sub'がありますか?そうでなければ、ラベルの後のコードは常に実行されます。それとは別に、 'OptionButtons'を使うことを考えてみましょう。 –

答えて

0

Doug Glancyのコメントによると、Here:の前に現在のコードにExit Subが存在しない可能性があります。そのため、ラベルの後ろのセクションにコードが入る可能性があります。

あなたが行っていることを達成するもう1つの方法は、CheckBoxがチェックされているかどうかを確認する文を1つだけ持っていれば、MsgBoxを表示します。次のように:

If CheckBoxBar.Value + _ 
    CheckBoxatm.Value + _ 
    CheckBoxmmHg.Value + _ 
    CheckBoxpsia.Value < -1 Then 
    MsgBox "You are only allowed to select one pressure unit." 
    Exit Sub 
End If 

それとも、チェックボックスのデフォルトプロパティであること.Valueに依存しているので、そのコードを「減らす」ことができます。

If CheckBoxBar + CheckBoxatm + CheckBoxmmHg + CheckBoxpsia < -1 Then 
    MsgBox "You are only allowed to select one pressure unit." 
    Exit Sub 
End If 

注:場合、このメソッドは動作しませんがCheckBox.TripleStateプロパティはTrueに設定されています。 (Cominternに感謝しています)

+0

ありがとうございます!最初の部分は実際には動作しませんでしたが、2番目の部分は動作するようです(残りのコードは1つのチェックボックスでは機能しませんが、2つは完全に動作します)。 – Derek

+0

暗黙的に 'CheckBox ' 'Boolean'への' Value'は 'CheckBox.TripleState'が' False'の場合にのみ機能します。 – Comintern

0

クリック機能を無効にして他のボックスをクリアすると、チェックボックスをオプションボタンのように動作させることができます(選択しないこともできます)。

Private Sub CheckBoxatm_Click() 
    If Me.Controls("CheckBoxatm").Value = True Then Call ClearOtherValues("CheckBoxatm") 
End Sub 

Private Sub CheckBoxBar_Click() 
    If Me.Controls("CheckBoxBar").Value = True Then Call ClearOtherValues("CheckBoxBar") 
End Sub 

Private Sub CheckBoxmmHg_Click() 
    If Me.Controls("CheckBoxmmHg").Value = True Then Call ClearOtherValues("CheckBoxmmHg") 
End Sub 

Private Sub CheckBoxpsia_Click() 
    If Me.Controls("CheckBoxpsia").Value = True Then Call ClearOtherValues("CheckBoxpsia") 
End Sub 

Private Function ClearOtherValues(cb As String) 
    Dim cbPressure() As String, i As Long 
    cbPressure = Split("CheckBoxBar,CheckBoxatm,CheckBoxmmHg,CheckBoxpsia", ",") 
    For i = 0 To UBound(cbPressure) 
     If cbPressure(i) <> cb Then Me.Controls(cbPressure(i)).Value = False 
    Next i 
End Function 
関連する問題