从VBA转换包含true / false的excel单元格作为复选框

时间:2013-01-17 11:33:32

标签: excel vba excel-vba

我在excel单元格中有一个列,其中包含“True”或“false”作为文本。

该列由VBA代码填充。

我需要显示一个选中而不是True的复选框,并取消选中一个复选框而不是False。

可以通过VBA代码完成吗?假设包含该值的单元格被称为

ActiveWorkBook.Sheets(“mySheetName”)。cells(i,4)

i =行索引,位于循环内。

2 个答案:

答案 0 :(得分:1)

此代码应该完成这项工作,只需根据您的需要更改For循环:

Sub subPlaceCheckbox()

    Const cDblCheckboxWidth As Double = 15
    Const cStrCheckboxPrefix As String = "cb4_"

    Dim cb As CheckBox
    Dim rng As Range
    Dim i As Long

    Application.ScreenUpdating = False

    'First, delete all old checkboxes to avoid doubles
    For Each cb In Sheet1.CheckBoxes
        If Left(cb.Name, Len(cStrCheckboxPrefix)) = _
            cStrCheckboxPrefix Then
            cb.Delete
        End If
    Next

    For i = 1 To 20
        Set rng = Sheet1.Cells(i, 4)

        'Place checkbox
        Set cb = Sheet1.CheckBoxes.Add( _
            rng.Left + rng.Width / 2 - cDblCheckboxWidth / 2, _
            rng.Top, cDblCheckboxWidth, rng.Height)

        'Set checkbox properties
        With cb
            .Name = "cb_" & rng.Address(False, False)
            .Value = rng.Value
            .LinkedCell = rng.Address
            .Display3DShading = True
            .Characters.Text = ""
        End With

        'Hide content of cell
        rng.NumberFormat = ";;;"

    Next i

    Application.ScreenUpdating = True
End Sub

答案 1 :(得分:1)

您可以将单元格保留为TRUE或FALSE,将复选框添加到工作表中,并将复选框上的LinkedCell设置为原始单元格。如果您不想看到单元格,请将复选框放在其顶部!