2014-02-02 2 views
0
Private Sub CheckBox1_Click() 
Dim MyLeft As Double 
Dim MyTop As Double 
Dim MyHeight As Double 
Dim MyWidth As Double 
dim emptyRow as long 

emptyRow = WorksheetFunction.CountA(Range("A:A")) + ActiveSheet.Checkboxes.count 
    MyLeft = Cells(emptyRow, 1).Left 
    MyTop = Cells(emptyRow, 1).Top 
    MyHeight = Cells(emptyRow, 1).Height 
    MyWidth = MyHeight = Cells(emptyRow, 1).Width 

    If CheckBox1.Value = True Then 

    ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select 
    With Selection 
     .Caption = "" 

    End With 
    End If 
End Sub 

У меня есть следующий код, но есть ли способ сделать флажки для разных столбцов в зависимости от того, какие флажки будут нажаты? поэтому, если щелкнуть флажок 1, тогда он установит флажок с галочкой в ​​столбце 1, и если будет установлен флажок 2, тогда он установит флажок с галочкой в ​​столбце 2, и если никаких флажков не будет нажата, это будет установите флажки, которые не отмечены. У меня есть 8 флажков - есть ли лучший способ сделать это вместо того, чтобы ставить несколько операторов if?добавить флажки в несколько столбцов?

ответ

0

Простым решением может быть добавление всех флажков, но используйте флаг .visible, чтобы определить, должны ли они отображаться пользователю. Кроме того, вместо того, чтобы писать код для каждого флажка, используйте единую подпрограмму «ValidateCheckboxes», которая охватывает их все, и вызывается из события click для каждого флажка.

Я собрал код, который делает это для всех флажков на активной карте. Просто добавьте их на свой экран в порядке возрастания, и этот код должен скрыть все, кроме последнего пустого галочки.

Sub ValidateCheckBoxes() 

Dim i As Integer 
Dim j As Integer 

With ActiveSheet 
For i = 1 To .CheckBoxes.Count - 1 

    Debug.Print .CheckBoxes(i).Caption 
    Debug.Print .CheckBoxes(i).Value 

    If .CheckBoxes(i).Value <> 1 Then 
     .CheckBoxes(i + 1).Visible = False 
    Else 
     If .CheckBoxes(i).Visible = False Then 
      .CheckBoxes(i + 1).Visible = False 
     Else 
      If Not .CheckBoxes(i + 1).Visible = True Then 
       'show the next checkbox 
       .CheckBoxes(i + 1).Visible = True 
       'set its value to false 
       .CheckBoxes(i + 1).Value = -4146 
       'hide all the remaining check boxes 
       For j = i + 2 To .CheckBoxes.Count 
        .CheckBoxes(j).Visible = False 
       Next j 
       Exit For 
      End If 
     End If 
    End If 
Next i 
End With 
End Sub 
Смежные вопросы