Excel VBA質問箱 IV

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

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


9750 / 13646 ツリー ←次へ | 前へ→

【25660】チェックボックスのチェック判定について さち 05/6/9(木) 22:32 発言[未読]
【25661】Re:チェックボックスのチェック判定について ponpon 05/6/9(木) 22:58 回答[未読]
【25662】Re:チェックボックスのチェック判定について Kein 05/6/9(木) 23:08 回答[未読]
【25663】Re:チェックボックスのチェック判定について ichinose 05/6/9(木) 23:13 発言[未読]
【25670】Re:チェックボックスのチェック判定について さち 05/6/10(金) 9:38 お礼[未読]

【25660】チェックボックスのチェック判定について
発言  さち  - 05/6/9(木) 22:32 -

引用なし
パスワード
   はじめまして。

Excel2000のVBAで、動的にチェックボックスを貼り付けて、
そのOn/Offを判定しようとしています。

動的に貼り付けることは、投稿No.6974を参考にさせて
頂いて実現することができたのですが、
On/Offを判定することができません。
どなたか方法を教えてください。

VBをまねて以下のように記述してみましたが、
オブジェクトがメソッドをサポートしていませんと
If s.Value = True Then MsgBox "True"の行でエラーになります。
Shapesを使っているのが悪いのでしょうか?
ご教授願います。

For Each s In ActiveSheet.Shapes
  If s.Type = msoOLEControlObject Then
    If Left(s.Name, 5) = "Check" Then
      If s.Value = True Then MsgBox "True"
    End If
  End If
Next

【25661】Re:チェックボックスのチェック判定につ...
回答  ponpon  - 05/6/9(木) 22:58 -

引用なし
パスワード
   こんばんは。
チェックボックスは、
trueかfalseで判定したらいかがでしょう。

Sub test()

If Worksheets(1).CheckBox1.Value = True Then
  MsgBox "trueです"
Else
  MsgBox "falseです"
End If

End Sub

【25662】Re:チェックボックスのチェック判定につ...
回答  Kein  - 05/6/9(木) 23:08 -

引用なし
パスワード
   複数のチェックボックスを使うなら、コントロールツールボックスのチェックボックス
より、フォームツールバーのチェックボックスの方が柔軟なコーディングが出来ます。
つまりコントロール配列のようなことが簡単にできて、一つのプロシージャで複数の
値を判定できるからです。例として「A1:A10の各セルに合わせてチェックボックスを
配置し、B1セルに合わせて配置したボタンを押すことで、それぞれのチェックボックス
の値を判定する」というマクロは

Sub MyCheckBox_Add()
  Dim Lp As Single, Tp As Single
  Dim Wp As Single, Hp As Single
  Dim C As Range

  With Range("A1")
   Wp = .Width: Hp = .Height
  End With
  For Each C In Range("A1:A10")
   Tp = C.Top
   ActiveSheet.CheckBoxes.Add 0.1, Tp, Wp, Hp
  Next
  Lp = Range("B1").Left
  ActiveSheet.Buttons _
  .Add(Lp, 0.1, Wp, Hp).OnAction = "MyCheck"
End Sub

↑これを1回だけ実行して、オブジェクトを配置します。ボタンを押したときに
呼び出すマクロは↓です。

Sub MyCheck()
  Dim i As Integer
  Dim Ms As String
 
  If VarType(Application.Caller) <> 8 Then Exit Sub
  With ActiveSheet.CheckBoxes
   For i = 1 To .Count
     If .Item(i).Value = xlOn Then
      Ms = Ms & .Item(i).Name & " = ON" & vbLf
     Else
      Ms = Ms & .Item(i).Name & " = OFF" & vbLf
     End If
   Next i
  End With
  MsgBox Ms
End Sub

なお、配置した全てのコントロールを一括して削除するには、ワークシートメニューの
「編集」「ジャンプ」「セル選択」で「オブジェクト」にチェックし、「編集」「クリア」
「すべて」を選択します。

【25663】Re:チェックボックスのチェック判定につ...
発言  ichinose  - 05/6/9(木) 23:13 -

引用なし
パスワード
   ▼さち さん:
こんばんは。

>はじめまして。
>
>Excel2000のVBAで、動的にチェックボックスを貼り付けて、
>そのOn/Offを判定しようとしています。
>
>動的に貼り付けることは、投稿No.6974を参考にさせて
>頂いて実現することができたのですが、
>On/Offを判定することができません。
>どなたか方法を教えてください。
>
>VBをまねて以下のように記述してみましたが、
>オブジェクトがメソッドをサポートしていませんと
>If s.Value = True Then MsgBox "True"の行でエラーになります。
>Shapesを使っているのが悪いのでしょうか?
>ご教授願います。
このコードは、
>
For Each s In ActiveSheet.oleobjects
  If Left(s.Name, 5) = "Check" Then
    If s.object.Value = True Then MsgBox "True"
   
>  End If
>Next
なんてすれば動くとは思いますが、心配なのは、
>Excel2000のVBAで、動的にチェックボックスを貼り付けて、
>そのOn/Offを判定しようとしています。
↑これ。
「コントロールツールボックス」にあるコントロールは、
動的作成に不向きということがこのNo.6974の投稿後に分かってきました。
(色々な不具合が確認されています)
予め作成しておくのなら良いのですが・・・。

なのでツールバー「フォーム」のチェックボックスを使用してみてはどうでしょうか?

動的な作成は「マクロの記録」で可能かと思います。

【25670】Re:チェックボックスのチェック判定につ...
お礼  さち  - 05/6/10(金) 9:38 -

引用なし
パスワード
   ponpon様
kein様
ichinose様

皆さん回答ありがとうございました。
フォームツールバーのチェックボックスにて
試してみることにします。
納期間近で、先輩につつかれていたので、
とっても助かりました。
ありがとうございます。m(_ _)m

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