Ответ 1
If Sheets("Sheet1").OLEObjects("CheckBox1").Object.Value = True Then
Я считаю, что Тим прав. У вас есть контроль формы. Для этого вы должны использовать этот
If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = 1 Then
Мне нужно использовать значение флажков для оператора IF-THEN. Исходя из того, что пользователь проверяет, способ, которым я должен вычислять вещи, изменяется. Однако я не могу понять, как использовать значения флажка или как их обнаружить. Вот код, который у меня есть до сих пор:
Private Sub Workbook_Open()
Range("E1:F7,A1:A4,B1:B4,C1:C3").Select
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A1").Select
Range("A1") = "Time"
Range("B1") = "Specimen Shape"
Range("C1") = "Data Type"
Range("A1:C1").Font.Bold = True
Range("E1") = "Owner"
Range("E2") = "Experiment Date"
Range("E3") = "Specimen ID"
Range("E4") = "Contaminant"
Range("E5") = "Leachant"
Range("E6") = "Temperature"
Range("E7") = "Regression Title"
Range("E1:E7").Font.Bold = True
Columns("A:E").EntireColumn.EntireColumn.Autofit
'Formatting Column A
Columns("A").EntireColumn.ColumnWidth = 9.71
ActiveSheet.CheckBoxes.Add(4, 14.5, 72, 17.25).Select
Selection.Characters.Text = "Days"
Range("A6").Select
ActiveSheet.CheckBoxes.Add(4, 30.5, 73.5, 17.25).Select
Selection.Characters.Text = "Hours"
ActiveSheet.CheckBoxes.Add(4, 45.75, 52.5, 17.25).Select
Selection.Characters.Text = "Minutes"
'Formatting Column B
ActiveSheet.CheckBoxes.Add(58, 14.5, 72, 17.25).Select
Selection.Characters.Text = "Cylinder"
ActiveSheet.CheckBoxes.Add(58, 30.5, 73.5, 17.25).Select
Selection.Characters.Text = "Wafer"
ActiveSheet.CheckBoxes.Add(58, 45.75, 52.5, 17.25).Select
Selection.Characters.Text = "Irregular"
'Formatting Column C
Columns("C").EntireColumn.ColumnWidth = 12.71
ActiveSheet.CheckBoxes.Add(140.5, 14.5, 72, 17.25).Select
Selection.Characters.Text = "Incremental"
ActiveSheet.CheckBoxes.Add(140.5, 30.5, 72, 17.25).Select
Selection.Characters.Text = "Cumulative"
Columns("F").EntireColumn.ColumnWidth = 60
Range("A1:C1").HorizontalAlignment = xlCenter
Range("F1").Select
Dim btn As Button
Dim rng As Range
With Worksheets("Sheet1")
Set rng = .Range("A9:C9")
Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
With btn
.Caption = "After making your selections above, click this button to continue."
.AutoSize = True
.OnAction = "DataInput"
End With
End With
End Sub
Что я хочу сделать, так же, как тест, если флажок "Время" отмечен, а затем нажмите кнопку для продолжения, я хочу, чтобы он сказал что-то вроде "YAY", используя IF-THEN выражение. Если флажок "Время" не установлен и вы нажимаете "Продолжить", я бы хотел сказать "AWW...".
Вот что я пытался сделать, и это не работает.
Sub DataInput()
If ActiveSheet.Shapes.Range(Array("Check Box 1")).Value = True Then
MsgBox ("Yay")
Else: MsgBox ("Aww")
End If
End Sub
Что я делаю неправильно?
If Sheets("Sheet1").OLEObjects("CheckBox1").Object.Value = True Then
Я считаю, что Тим прав. У вас есть контроль формы. Для этого вы должны использовать этот
If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = 1 Then
Вы можете попробовать что-то вроде этого....
Dim cbTime
Set cbTime = ActiveSheet.CheckBoxes.Add(100, 100, 50, 15)
With cbTime
.Name = "cbTime"
.Characters.Text = "Time"
End With
If ActiveSheet.CheckBoxes("cbTime").Value = 1 Then 'or just cbTime.Value
'checked
Else
'unchecked
End If
Флажок имеет связанную ячейку, которая содержит значение True/False, представляющее состояние флажка. Гораздо проще ссылаться на это значение ячейки, чем на значение встроенного объекта, который является флажком.
Вручную: щелкните правой кнопкой мыши на флажке, выберите "Формат", щелкните в поле "Связанная ячейка" и выберите ячейку, чтобы содержать значение флажка.
В коде:
Set cbTime = ActiveSheet.CheckBoxes.Add(100, 100, 50, 15)
With cbTime
.Value = xlOff ' = unchecked xlOn = checked
.LinkedCell = "$A$1"
End With
Sub Datainput()
'Checkbox values are 0 (false), 1 (true), 2 (changed or grey)
If activesheet.CheckBoxes("Check Box 1").value = 1 then
Msgbox ("Yay")
Else: Msgbox("Aww")
End if
End Sub
Я обнаружил, что могу получить доступ к флажку напрямую, используя Worksheets("SheetName").CB_Checkboxname.value
напрямую, без связи с дополнительными объектами.
Кажется, что в коде макроса VBA для элемента управления ActiveX флажок вы используете
If (ActiveSheet.OLEObjects("CheckBox1"). Object.Value = True)
и для элемента управления флажок формы вы используете
If (ActiveSheet.Shapes("CheckBox1"). OLEFormat.Object.Value = 1)