只能连续选中一个复选框吗?

时间:2013-10-29 12:29:47

标签: excel excel-vba checkbox vba

我连续有5到6个复选框(活动x),我有50行。

有没有办法只能在一行中勾选一个复选框(只有一个答案1,2,3,4或5)?

要做到这一点的任何简单的vba,我不想为每个复选框编写代码。

1 个答案:

答案 0 :(得分:1)

是的,可以做到但为什么要使用ActiveX控件和额外的编码?为什么不数据验证列表?看这个截图

enter image description here

如果您仍想要VBA解决方案,那么我建议您使用FORM控件并使用他们的ALT Text进行配置。我实际上在其中一篇SO帖子中展示了如何使用Alt Text

来使用组相似的控件

enter image description here

修改

如果您想沿着VBA路走下去,那么这是另一种选择,DOESN'T使用任何FORM / Active X控件

如下图所示排列纸张。

enter image description here

现在将此代码粘贴到工作表代码区域

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.CountLarge > 1 Then Exit Sub

    If Not Intersect(Target, Columns(2)) Is Nothing Then ClearCells Target.Row, 2
    If Not Intersect(Target, Columns(4)) Is Nothing Then ClearCells Target.Row, 4
    If Not Intersect(Target, Columns(6)) Is Nothing Then ClearCells Target.Row, 6
    If Not Intersect(Target, Columns(8)) Is Nothing Then ClearCells Target.Row, 8
    If Not Intersect(Target, Columns(10)) Is Nothing Then ClearCells Target.Row, 10
End Sub

Sub ClearCells(r As Long, c As Long)
    For i = 2 To 10 Step 2
        If i <> c Then
            With Cells(r, i)
                .Borders(xlDiagonalDown).LineStyle = xlNone
                .Borders(xlDiagonalUp).LineStyle = xlNone
                .ClearContents
            End With
        End If
    Next i
    With Cells(r, c)
        With .Borders(xlDiagonalDown)
            .LineStyle = xlContinuous
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlDiagonalUp)
            .LineStyle = xlContinuous
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
            .Weight = xlThin
        End With
    End With
End Sub

现在用户所要做的就是选择任何一个灰色单元格,它将是Crossed Out。此外,如果同一行中还有任何其他十字,则它将被删除。

enter image description here

SAMPLE FILE