Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


34819 / 76734 ←次へ | 前へ→

【47119】Re:オートフィルタ使用時のチェックボックス
回答  Kein  - 07/3/1(木) 17:05 -

引用なし
パスワード
   これは「オートフィルターをかけた後の問題」なので、オートフィルター
じたいをかけるところからマクロにするか、オートフィルターは手作業
でかけて、その後チェックボックスを挿入するか、でコードが違ってきます。
どちらにしても「予めチェックボックスは挿入しない」でおく方が、
やりやすいと思われます。
仮に後者の方法を選ぶなら、コードは以下のようなものになります。

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プロパティ の設定を
しないようにします。

4 hits

【47070】オートフィルタ使用時のチェックボックス さくら 07/2/28(水) 11:00 質問
【47073】Re:オートフィルタ使用時のチェックボックス りん@通りすがり 07/2/28(水) 13:03 回答
【47082】Re:オートフィルタ使用時のチェックボックス りん 07/2/28(水) 14:31 回答
【47093】Re:オートフィルタ使用時のチェックボックス さくら 07/2/28(水) 17:41 発言
【47119】Re:オートフィルタ使用時のチェックボックス Kein 07/3/1(木) 17:05 回答
【47120】Re:オートフィルタ使用時のチェックボックス Kein 07/3/1(木) 17:09 発言

34819 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free