1

チェックボックスを使用してExcelでWBSに取り組んでいます。

私は次のものを持っています:

[checkbox1] レベル A
---------[checkBox2] 項目 1
---------[checkBox3] 項目 2
[checkbox4] レベル B
---------[checkBox5]項目 3

チェックボックス 2 のチェックを外すと、アイテム 1 の隣のセルに X が表示されます。チェックボックス 2 にチェックを入れると、X が削除されます。

チェックボックス 1 のチェックを外すと、チェックボックス 2 とチェックボックス 3 のチェックが外されますが、項目 1 と 2 の隣のセルに X は表示されません。イベントをトリガーせずに 2 つのチェックボックスのチェックを外すだけです。そのイベントをcheckBox1にリンクするにはどうすればよいですか?

フォーム コントロールでその種のイベントをトリガーできない場合、他の質問は、チェックボックスが ActiveX コントロールにある行と列を知る方法を知ることです。

フォーム コントロールでは を使用できますsheets("sheet1").checkboxes(application.caller)が、これは ActiveX コントロールでは機能しません。

チェックボックス 2 またはチェックボックス 3 のコード:

Sub CheckBoxLine()
Dim ws As Worksheet
Dim chk As CheckBox
Dim lColD, myCol As Long
Dim lColChk As Long
Dim lRow As Long
Dim rngD As Range
lColD = 1 'number of columns to the right
Set ws = ActiveSheet
Set chk = ws.CheckBoxes(Application.Caller)
lRow = chk.TopLeftCell.Row
lColChk = chk.TopLeftCell.Column
Set rngD = ws.Cells(lRow, lColChk + lColD)

Select Case chk.Value
Case 1   'box is checked
  rngD.Value = "X"
Case Else   'box is not checked
  rngD.Value = "X"

End Select

End Sub

チェックボックス 1 のコード:

Select Case chk.Value
Case 1   'box is checked
  For Each cb In ws.CheckBoxes
    If cb.Name = "Check box 2" Then
        cb.Value = 1
    End If

    If cb.Name = "Check box 3" Then
        cb.Value = 1
    End If
  Next cb

Case Else   'box is not checked
  For Each cb In ws.CheckBoxes
    If cb.Name = "Check box 2" Then
        cb.Value = 0
    End If

    If cb.Name = "Check box 3" Then
        cb.Value = 0
    End If
  Next cb
End Select
4

1 に答える 1

0

明確化後に回答が変更されました。

フォーム コントロールのイベントはないと思います。そして、ActiveXコントロールが存在するセルを取得するのは少し複雑です。ワークブックの 1 つでそれを実行しましたが、追加の Class モジュールでいくつかのコードが必要であり、実装方法を思い出せません。

フォーム コントロールのチェックボックスを使用しているため、新しく作成した ActiveX チェックボックスのイベントを使用する代わりに、次のコードを使用する方が簡単だと思います。必要に応じて機能することを願っています。

Option Explicit
Dim ws As Worksheet

Sub CheckBoxLine(Optional strChkName As String)
    Dim chk As CheckBox
    Dim lColD, myCol As Long
    Dim lColChk As Long
    Dim lRow As Long
    Dim rngD As Range

    lColD = 1 'number of columns to the right
    If ws Is Nothing Then Set ws = ActiveSheet
    If strChkName = vbNullString Then
        Set chk = ws.CheckBoxes(Application.Caller)
    Else
        Set chk = ws.CheckBoxes(strChkName)
    End If
    lRow = chk.TopLeftCell.Row
    lColChk = chk.TopLeftCell.Column
    Set rngD = ws.Cells(lRow, lColChk + lColD)

    Select Case chk.Value
    Case 1   'box is checked
      rngD.Value = vbNullString
    Case Else   'box is not checked
      rngD.Value = "X"
    End Select

    Set chk = Nothing
    Set ws = Nothing
End Sub

Sub Code_for_Checkbox1()
    Set ws = ActiveSheet
    ws.CheckBoxes("Check Box 2").Value = ws.CheckBoxes(Application.Caller).Value
    ws.CheckBoxes("Check Box 3").Value = ws.CheckBoxes(Application.Caller).Value
    Call CheckBoxLine("Check Box 2")
    Call CheckBoxLine("Check Box 3")
End Sub
于 2015-12-29T07:43:58.887 に答える