|
これは「オートフィルターをかけた後の問題」なので、オートフィルター
じたいをかけるところからマクロにするか、オートフィルターは手作業
でかけて、その後チェックボックスを挿入するか、でコードが違ってきます。
どちらにしても「予めチェックボックスは挿入しない」でおく方が、
やりやすいと思われます。
仮に後者の方法を選ぶなら、コードは以下のようなものになります。
Sub MyCheckBox_Add()
Dim xR As Long, xC As Long
Dim MyR As Range, C As Range
With ActiveSheet
If .FilterMode = False Then Exit Sub
.CheckBoxes.Delete
With .AutoFilter.Range
xR = .Rows.Count - 1: xC = .Columns.Count
Set MyR = .Range("A2").Resize(xR) _
.Offset(, xC).SpecialCells(12)
End With
.CheckBoxes.OnAction = "Test_Action" For Each C In MyR
.CheckBoxes.Add(C.Left + 0.1, C.Top + 0.1, _
C.Width - 0.1, C.Height - 0.1).Caption = ""
Next
End With
Set MyR = Nothing
End Sub
Sub Test_Action()
Dim x As Variant
x = Application.Caller
If VarType(x) <> 8 Then Exit Sub
If ActiveSheet.CheckBoxes(x).Value = xlOn Then
MsgBox x & " がチェックされました"
Else
MsgBox x & " のチェックが外れました"
End If
End Sub
* チェックボックスにチェックを付けたときや外したときに MsgBox で
表示される値は、各チェックボックスに付く固有の Name です。
それを当該チェックボックスの横に表示させるなら、ループのところを
For Each C In MyR
.CheckBoxes.Add C.Left + 0.1, C.Top + 0.1, _
C.Width - 0.1, C.Height - 0.1
Next
というように、引数を囲む () を削除して Captionプロパティ の設定を
しないようにします。
|
|