web-dev-qa-db-fra.com

Comment utiliser les cases à cocher dans une instruction IF-THEN dans Excel VBA 2010?

Je dois utiliser la valeur des cases à cocher pour une instruction IF-THEN. En fonction de ce que l'utilisateur vérifie, la façon dont je dois calculer les choses change. Cependant, je ne peux pas comprendre comment utiliser les valeurs des cases à cocher ou comment les détecter. Voici le code que j'ai jusqu'à présent:

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

Ce que je veux faire, à titre d’essai, c’est que si la case "Heure" est cochée, puis que le bouton est enfoncé pour continuer, je veux qu’il dise quelque chose comme "YAY", en utilisant une instruction IF-THEN. Si la case "Heure" n'est pas cochée et que vous appuyez sur Continuer, j'aimerais que le message "AWW ..." soit affiché.

C'est ce que j'ai essayé de faire pour que cela se produise, et cela ne fonctionne pas.

Sub DataInput()
    If ActiveSheet.Shapes.Range(Array("Check Box 1")).Value = True Then
    MsgBox ("Yay")
    Else: MsgBox ("Aww")
    End If
End Sub

Qu'est-ce que je fais mal?

9
TheTreeMan
If Sheets("Sheet1").OLEObjects("CheckBox1").Object.Value = True Then

Je crois que Tim a raison. Vous avez un contrôle de formulaire. Pour cela, vous devez utiliser cette

If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = 1 Then
28
Siddharth Rout

Vous pouvez essayer quelque chose comme ça ....

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
5
Tim Williams

Une case à cocher a une cellule liée, qui contient le True/False représentant l'état de la case à cocher. Il est beaucoup plus facile de référencer la valeur de cette cellule que la valeur de l'objet incorporé qui est la case à cocher. 

Manuellement: Cliquez avec le bouton droit de la souris sur la case à cocher, choisissez Format, cliquez dans la case Cellule liée et sélectionnez la cellule devant contenir la valeur de la case à cocher.

Dans du code:

Set cbTime = ActiveSheet.CheckBoxes.Add(100, 100, 50, 15)
With cbTime
    .Value = xlOff ' = unchecked  xlOn = checked
    .LinkedCell = "$A$1"
End With
4
Jon Peltier
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
3
Zach

J'ai constaté que je pouvais accéder directement à la case à cocher en utilisant Worksheets("SheetName").CB_Checkboxname.value Directement, sans faire appel à des objets supplémentaires.

0
Giso