获取Excel工作表中插入的HTML复选框的值

时间:2012-08-10 12:47:38

标签: vba excel-vba excel

我有一个从HTML表格中复制的电子表格,用于我们的一个内部应用程序。该表已粘贴到Excel(2010)中,并具有True / False值的复选框。有超过1800个复选框,电子表格需要很长时间才能加载。

如何快速将这些转换为是/否值?

我尝试创建一个新列并插入一个IF语句,但结果始终为false。我想我引用了单元格值而不是复选框值。复选框的名称如“HTMLCheckbox1”......“HTMLCheckbox1824”。

1 个答案:

答案 0 :(得分:2)

我想不出通过Excel公式做到这一点的方法 - 你没有明确提到它,但你可以使用VBA来获得解决方案。

您应该能够通过OLEObjects对象访问这些复选框,该集合是Worksheet对象的成员。然后,您可以检查每个对象的progID以查看它是否为HTML复选框(Forms.HTML:Checkbox.1),然后记录其值(如果是这种情况)。

这里是一些示例代码,我将它们放在一起搜索Sheet1的HTML复选框,然后使用包含三个元素的字符串数组填充集合,如下所示:

  • HTMLName
  • 经过

例如,HTML <input type="checkbox" name="sports" value="soccer" />会导致:

  • HTMLName:“sports”
  • 价值:“足球”
  • 检查:“TRUE”或“FALSE”取决于是否已检查

然后将此集合写入Sheet2。复选框值将转换为字符串。

Sub GetCheckBoxValues()

    Dim colCheckboxValues As Collection

    Set colCheckboxValues = GetCheckBoxValuesFromSheet(Sheet1)

    Dim lCount As Long

    For lCount = 1 To colCheckboxValues.Count

        Sheet2.Cells(lCount, 1).Value = colCheckboxValues.Item(lCount)(0) 'HTMLName
        Sheet2.Cells(lCount, 2).Value = colCheckboxValues.Item(lCount)(1) 'Value
        Sheet2.Cells(lCount, 3).Value = colCheckboxValues.Item(lCount)(2) 'Checked (or unchecked)

    Next lCount

End Sub


Function GetCheckBoxValuesFromSheet(sht As Worksheet) As Collection

    Const HTMLCheckBoxProgID As String = "Forms.HTML:Checkbox.1"

    Dim colCheckBoxes As Collection
    Set colCheckBoxes = New Collection

    Dim oOLEObject As OLEObject

    Dim lCount As Long
    lCount = 0

    For Each oOLEObject In sht.OLEObjects

        If oOLEObject.progID = HTMLCheckBoxProgID Then

            Dim sCheckBoxData(2) As String

            sCheckBoxData(0) = oOLEObject.Object.HTMLName
            sCheckBoxData(1) = oOLEObject.Object.Value
            sCheckBoxData(2) = oOLEObject.Object.Checked

            lCount = lCount + 1

            colCheckBoxes.Add Item:=sCheckBoxData, Key:="CheckBox" & CStr(lCount)

        End If

    Next oOLEObject

    Set GetCheckBoxValuesFromSheet = colCheckBoxes

End Function