Проверка флажка на основе листа.

Я пытаюсь использовать предложение IF, чтобы определить, установлен ли мой флажок с именем "Флажок 1".

Мой текущий код:

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". Каждый флажок имеет одинаковое отформатированное имя "флажок...".

Ответы

Ответ 1

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 - смешанным (серый ящик)

Ответ 2

Это то, что вы пытаетесь?

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 соответствующим именем флажка.

Ответ 3

На основе предыдущих ответов вы можете использовать тот факт, что 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 > 0 возвращает True.

Применение функции Abs преобразует True в 1.

Если флажок снят, .Value= -4146.

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0 возвращает False.

Применение функции Abs преобразует False в 0.

Ответ 4

Кажется, что в коде макроса VBA для элемента управления ActiveX флажок вы используете

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

и для элемента управления флажок формы вы используете

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

Ответ 5

Попробуйте: Controls("Check Box 1") = True