Ich muss den Wert von Kontrollkästchen für eine IF-THEN-Anweisung verwenden. Je nachdem, was der Benutzer überprüft, ändert sich die Art und Weise, wie ich die Dinge berechnen muss. Ich kann jedoch nicht herausfinden, wie die Kontrollkästchenwerte verwendet werden oder wie man sie erkennt. Hier ist der Code, den ich bis jetzt habe:
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
Ich möchte, dass es nur als Test gilt, wenn das Kontrollkästchen "Time" (Zeit) markiert ist und die Schaltfläche gedrückt wird, um fortzufahren. Ich möchte, dass "YAY" mit einer IF-THEN-Anweisung angezeigt wird. Wenn das Kontrollkästchen "Zeit" nicht markiert ist und Sie auf "Weiter" drücken, würde ich "AWW ..." sagen.
Ich habe versucht, dies zu erreichen, und es funktioniert nicht.
Sub DataInput()
If ActiveSheet.Shapes.Range(Array("Check Box 1")).Value = True Then
MsgBox ("Yay")
Else: MsgBox ("Aww")
End If
End Sub
Was mache ich falsch?
If Sheets("Sheet1").OLEObjects("CheckBox1").Object.Value = True Then
Ich glaube, Tim hat recht. Sie haben ein Formularsteuerelement. Dafür musst du das nutzen
If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = 1 Then
Sie können so etwas versuchen ....
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
Ein Ankreuzfeld hat eine verknüpfte Zelle, die den Wert des Ankreuzfelds als Wahr/Falsch enthält. Es ist viel einfacher, auf den Wert dieser Zelle zu verweisen als auf den Wert des eingebetteten Objekts, das das Kontrollkästchen ist.
Manuell: Klicken Sie mit der rechten Maustaste auf das Kontrollkästchen, wählen Sie "Format", klicken Sie in das Feld "Verknüpfte Zelle" und wählen Sie die Zelle aus, die den Kontrollkästchenwert enthalten soll.
In Code:
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
Ich habe festgestellt, dass ich mit Worksheets("SheetName").CB_Checkboxname.value
Direkt auf die Checkbox zugreifen kann, ohne sich auf zusätzliche Objekte zu beziehen.
Es scheint, dass Sie in VBA-Makrocode für ein ActiveX-Kontrollkästchen Steuerelement verwenden
If (ActiveSheet.OLEObjects ("CheckBox1"). Object.Value = True)
und für ein Formular-Kontrollkästchen, das Sie verwenden
If (ActiveSheet.Shapes ("CheckBox1"). OLEFormat.Object.Value = 1)