2012-08-16 12 views
9

Ho bisogno di utilizzare il valore di checkbox per un'istruzione IF-THEN. In base a ciò che l'utente controlla, il modo in cui devo calcolare le cose cambia. Tuttavia, non riesco a capire come utilizzare i valori della casella di controllo o come rilevarli. Qui è il codice che ho finora:Come utilizzare le checkbox in un'istruzione IF-THEN in Excel VBA 2010?

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 

quello che voglio fare, proprio come un test, è se la casella di controllo "Time" è selezionata, e quindi si preme il pulsante per continuare, lo voglio per dire qualcosa come "YAY", usando una dichiarazione IF-THEN. Se la casella di controllo "Ora" non è selezionata e si preme Continua, mi piacerebbe dire "AWW ...".

Questo è quello che ho cercato di realizzare e che non funziona.

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

Cosa sto sbagliando?

risposta

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

Credo che Tim abbia ragione. Hai un controllo forma. Per questo è necessario utilizzare questa immagine Una casella

If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = 1 Then 
+0

ho ottenuto un errore, "Impossibile ottenere la proprietà OLEObjects della classe del foglio di lavoro". ? – TheTreeMan

+0

1) Hai sostituito "Foglio1" con il nome del foglio relativo? 2) Hai sostituito "CheckBox1" con il nome del Checkbox pertinente? –

+0

Sì, non ha funzionato ancora: \ Ho appena distanziato "Checkbox1", poiché quando ho registrato una macro e ho cancellato quella casella di controllo, la macro era: 'ActiveSheet.Shapes.Range (Array (" Check Box 1 " Seleziona) – TheTreeMan

5

Si può provare qualcosa di simile ....

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 
4

ha una cella collegata, che contiene il Vero/Falso che rappresenta lo stato della casella di controllo . È molto più facile fare riferimento al valore di questa cella rispetto al valore dell'oggetto incorporato che è la casella di controllo.

Manualmente: fare clic con il pulsante destro del mouse sulla casella di controllo, scegliere Formato, fare clic nella casella Cella collegata e selezionare la cella per contenere il valore della casella di controllo.

in codice:

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