2012-08-16 15 views
9

Potrzebuję użyć wartości pól wyboru dla instrukcji IF-THEN. Na podstawie tego, co sprawdza użytkownik, sposób, w jaki muszę obliczyć zmiany, ulega zmianie. Jednak nie mogę wymyślić, jak korzystać z wartości pól wyboru lub jak je wykryć. Oto kod mam tak daleko:Jak używać pól wyboru w instrukcji IF-THEN w programie 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 

Co chcę to zrobić, po prostu jako test, jest wtedy, gdy pole wyboru „Time” jest zaznaczone, a następnie przycisk jest wciśnięty, aby kontynuować, chcę go powiedzieć coś w rodzaju "YAY", używając instrukcji IF-THEN. Jeśli pole wyboru "Czas" nie jest zaznaczone i naciśniesz przycisk Kontynuuj, chciałbym powiedzieć "AWW ...".

To jest to, co próbowałem zrobić, i to nie działa.

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

Co robię źle?

Odpowiedz

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

Wierzę, że Tim ma rację. Masz kontrolę formularza. Do tego trzeba użyć tego

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

mam błąd: „Nie można uzyskać własność OLEObjects klasy Arkusz”. ? – TheTreeMan

+0

1) Czy zastąpiłeś "Arkusz1" odpowiednią nazwą arkusza? 2) Czy zastąpiłeś "CheckBox1" odpowiednią nazwą Checkbox? –

+0

Tak, to nadal nie działa: \ Właśnie oddzieliłem "Checkbox1", ponieważ kiedy nagrałem makro i usunąłem to pole wyboru, makro było: 'ActiveSheet.Shapes.Range (Array (" Check Box 1 ") Wybierz " – TheTreeMan

5

Można spróbować coś takiego ....

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

pole wyboru ma połączone komórki, która zawiera Prawda/Fałsz reprezentujący stan pola wyboru . Znacznie łatwiej jest odwołać się do wartości tej komórki niż wartość osadzonego obiektu, która jest polem wyboru.

Ręcznie: Kliknij prawym przyciskiem myszy na pole wyboru, wybierz Formatowanie, kliknij pole Połączona komórka i wybierz komórkę, która ma zawierać wartość pola wyboru.

W kodzie:

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 
Powiązane problemy