Ответ 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 - смешанным (серый ящик)
Я пытаюсь использовать предложение 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". Каждый флажок имеет одинаковое отформатированное имя "флажок...".
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 - смешанным (серый ящик)
Это то, что вы пытаетесь?
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
соответствующим именем флажка.
На основе предыдущих ответов вы можете использовать тот факт, что 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
.
Кажется, что в коде макроса VBA для элемента управления ActiveX флажок вы используете
If (ActiveSheet.OLEObjects("CheckBox1"). Object.Value = True)
и для элемента управления флажок формы вы используете
If (ActiveSheet.Shapes("CheckBox1"). OLEFormat.Object.Value = 1)
Попробуйте: Controls("Check Box 1") = True