web-dev-qa-db-ja.com

ワークシートベースのチェックボックスがチェックされているかどうかの確認

私は、プログラムでさらに使用するために、「チェックボックス1」という名前のチェックボックスがチェックされているかどうかを判断するために、IF句を使用しようとしています。

私の現在のコード:

Sub Button167_Click()
 If ActiveSheet.Shapes("Check Box 1") = True Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub

これは機能していないようですが、デバッグで問題があることがわかります

      ActiveSheet.Shapes("Check Box 1")

ただし、このコードが機能することはわかっています(別の目的を果たしている場合でも)。

ActiveSheet.Shapes("Check Box 1").Select
With Selection
.Value = xlOn

編集:より多くの情報が必要な場合、私のチェックボックス(私のページには200個あります)は、「Demande」という名前でsheet1にあります。また、各チェックボックスには、「チェックボックス...」と同じ形式の名前が付いています。

すべての助けをいただければ幸いです。ありがとう

20
Sub Button167_Click()
 If ThisWorkbook.Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value = 1 Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub

1がチェックされ、-4146がオフにされ、2が混合されます(灰色のボックス)

21
Motes

これはあなたがしようとしていることですか?

Sub Sample()
    Dim cb As Shape

    Set cb = ActiveSheet.Shapes("Check Box 1")

    If cb.OLEFormat.Object.Value = 1 Then
        MsgBox "Checkbox is Checked"
    Else
        MsgBox "Checkbox is not Checked"
    End If
End Sub

Activesheetを関連するシート名に置き換えます。また、Check Box 1を関連するチェックボックス名に置き換えます。

10
Siddharth Rout

previousanswers に基づいて、Trueが-1でFalseが0であるという事実を活用して、このようにコードを短縮できます。 :

_Sub Button167_Click()
  Range("Y12").Value = _
    Abs(Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0)
End Sub
_

チェックボックスがオンの場合、_.Value_ = 1。

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0Trueを返します。

Abs関数を適用すると、Trueが_1_に変換されます。

チェックボックスがオフの場合、_.Value_ = -4146。

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0Falseを返します。

Abs関数を適用すると、Falseが_0_に変換されます。

3
JimmyPena

ActiveXチェックボックスコントロールのVBAマクロコードで使用しているようです

If(ActiveSheet.OLEObjects( "CheckBox1")。Object.Value = True)

使用するフォームチェックボックスコントロール

If(ActiveSheet.Shapes( "CheckBox1")。OLEFormat.Object.Value = 1)

0
Allan F