【问题标题】:Import CheckBox Settings From Excel从 Excel 导入复选框设置
【发布时间】:2015-09-10 16:18:09
【问题描述】:

我有一个 Excel 工作表,其中包含 14 个带有复选框的条目。我想将这些复选框的状态读入 Visual Basic 中的相应复选框。但是,我正在为这种访问而苦苦挣扎。我相信我只能按名称访问 Excel 工作表中的复选框,因为我认为它们没有像 Visual Basic 复选框那样的索引,所以我认为我必须单独检查所有 14 个。所以两个问题:

1) 我是否必须按名称引用 Excel 复选框,因为它们与特定索引无关,正确(这也意味着 14 个单独的行用于访问,而不是某种 for 循环)?

2) 我如何将复选框的值读入我的 Vsual Basic 程序?我试过这个:

    Dim oExcel As Excel.Application
    Dim oBook As Excel.Workbook
    Dim oSheet As Excel.Worksheet

    oExcel = New Excel.Application      'Create a new instance of Excel
    oExcel.Workbooks.Open("C:\QA Controller Test Files\" & SelectController.Text & ".xlsm")
    oSheet = oExcel.Worksheets(1)

    Dim checked As Boolean = oSheet.Shapes("Verify USB Revision Reporting").ControlFormat.Value
        If checked Then TestSelection.CheckedItems(1) = True

我收到一条错误消息,提示“接口 'Microsoft.Office.Interop.Excel.Shapes' 无法编入索引,因为它没有默认属性。

【问题讨论】:

    标签: excel vba checkbox


    【解决方案1】:

    您必须遍历工作表上的所有形状并测试每个形状以确保您有一个复选框。这是一个示例(我的工作站上没有 Visual Basic,但这应该可以):

    Option Explicit
    
    Sub GetCheckBoxes()
        Dim oSheet As Worksheet
        Dim oShape As Shape
    
        Set oSheet = ActiveSheet
    
        For Each oShape In oSheet.Shapes
            If (oShape.Type = msoFormControl) And (oShape.FormControlType = xlCheckBox) Then
                If oShape.ControlFormat.Value = 1 Then
                    Debug.Print "box '" & oShape.Name & "' is checked!"
                Else
                    Debug.Print "box '" & oShape.Name & "' is not checked!"
                End If
            End If
        Next oShape
    End Sub
    

    【讨论】:

    • 稍作调整,这几乎完美运行。我唯一的问题是它一直在寻找一个额外的形状,我不知道它认为它看到了什么。我的 Excel 工作表确实有一些其他单元格,但只有 14 个条目是复选框。但它一直在寻找 15。有什么想法吗?
    • 啊,别管了,我发现了如何在 Excel 的“选择痛苦”菜单中显示所有形状,而且我确实有一个额外的形状。
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多