【问题标题】:Obtain the value of an HTML Checkbox inserted in Excel worksheet获取 Excel 工作表中插入的 HTML Checkbox 的值
【发布时间】:2012-08-10 12:47:38
【问题描述】:

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

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

我尝试创建一个新列并插入一个 IF 语句,但结果总是错误的。我想我引用了单元格值而不是复选框值。复选框的名称类似于“HTMLCheckbox1”...“HTMLCheckbox1824”。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我想不出通过 Excel 公式执行此操作的方法 - 您没有明确提及,但您可以使用 VBA 来获得解决方案。

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

    以下是我整理的一些示例代码,它在 Sheet1 中搜索 HTML 复选框,然后使用包含以下三个元素的字符串数组填充集合:

    • HTML 名称
    • 价值
    • 已检查

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

    • HTML 名称:“运动”
    • 值:“足球”
    • 已检查:“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
    

    【讨论】:

    • 不错。如果目标是用它们的实际值替换这些复选框,那么检查每个复选框的 TopLeftCell 属性可能很有用:如果该单元格为空,您可以直接插入值(假设所有复选框都正确定位在它们的相应的行)
    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多