Excel VBA質問箱 IV

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

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


6114 / 13645 ツリー ←次へ | 前へ→

【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 発言[未読]

【47070】オートフィルタ使用時のチェックボックス
質問  さくら  - 07/2/28(水) 11:00 -

引用なし
パスワード
   お世話になります。VBA初心者です。
簡単なことかもしれませんがご教授ください。

データが存在する行にフォームのチェックボックスを配置して、行の選択ができるようにしています。
オートフィルタを使用しているのですが、オートフィルタでデータを絞った時、データの最終行が非表示になった場合、最終行にあるチェックボックスが最終行の次の行に表示されてしまいます。
行の高さを広くしたり、コントロールのチェックボックスに変更してみたりしましたが、改善されません。
原因や改善方法をご存知の方、よろしくお願いします。

【47073】Re:オートフィルタ使用時のチェックボッ...
回答  りん@通りすがり E-MAIL  - 07/2/28(水) 13:03 -

引用なし
パスワード
   さくら さん、こんにちわ。

>行の高さを広くしたり、コントロールのチェックボックスに変更してみたりしましたが、改善されません。
>原因や改善方法をご存知の方、よろしくお願いします。
コントロールの方ですが。

チェックボックス上で右クリックをして、

 コントロールの書式設定 → [プロパティ]タブ
  セルにあわせて移動やサイズ変更をする にチェック

または、
 プロパティ
  Placement を 1 にする


フォームの方は「セルにあわせて移動やサイズ変更をする」が選べないのでわかりません、ごめんね。

【47082】Re:オートフィルタ使用時のチェックボッ...
回答  りん E-MAIL  - 07/2/28(水) 14:31 -

引用なし
パスワード
   ちなみに、シート上にすでにあるチェックボックス(コントロールの方)をマクロで設定するならこんな感じ。

Sub test()
  Dim obj As OLEObject
  For Each obj In Application.ActiveSheet.OLEObjects
   If TypeName(obj.Object) = "CheckBox" Then obj.Placement = 1
  Next
End Sub

【47093】Re:オートフィルタ使用時のチェックボッ...
発言  さくら  - 07/2/28(水) 17:41 -

引用なし
パスワード
   レスありがとうございます。
ためしてみたところ動きはOKでしたが、コントロールにするとかなり重くなるんですね。なので、やはりフォームのチェックボックスを使いたいのです。
引き続きお助けをお待ちしますが、無理なんでしょうか・・・

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

【47120】Re:オートフィルタ使用時のチェックボッ...
発言  Kein  - 07/3/1(木) 17:09 -

引用なし
パスワード
   すいません。コピペする際にちょっとおかしくなったので、再掲します。

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
   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
   .CheckBoxes.OnAction = "Test_Action"
  End With
  Set MyR = Nothing
End Sub

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