22

「Check Box 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 個あります) は、シート 1 に「Demande」という名前で配置されています。各チェックボックスには、「Check Box ...」という同じ形式の名前が付いています。

4

5 に答える 5

29
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 は混合 (灰色のボックス)

于 2012-07-31T14:43:56.040 に答える
11

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

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また、関連するチェックボックス名に置き換えます。

于 2012-07-31T14:33:32.357 に答える
4

前の 回答に基づいて、True-1 と0 であるという事実を利用して、次のFalseようにコードを短縮できます。

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 > 0戻りますTrue

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

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

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0戻りますFalse

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

于 2012-07-31T20:27:11.617 に答える
2

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

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

および使用するフォームチェックボックスコントロールの場合

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

于 2019-09-18T01:52:22.120 に答える
-2

試す:Controls("Check Box 1") = True

于 2012-07-31T14:08:56.763 に答える