使用VBA从Workbook检索OLEObjects的信息

时间:2018-12-18 10:15:13

标签: excel vba excel-vba checkbox

场景::我正在尝试使用VBA(最初是Python,但找不到任何方法)阅读所有信息或工作表。由于我必须阅读的工作表具有不同的格式,并且通常是一团糟,因此我遍历工作表中的所有对象,获取它们的名称和值(是否经过检查,以二进制形式显示)。

问题:通常情况下,这些盒子是乱序的,所以我无法知道以什么顺序出现。因此,我尝试检索一些基本形式的位置信息或对周围单元格的引用。

我尝试过的操作:按照文档(https://docs.microsoft.com/en-us/office/vba/api/excel.oleobjects),我尝试了所有类型的不同属性,但是没有一种可以直接解决此问题。我最接近的是BottomRightCell,但这仅产生单元格的值,而我需要位置或单元格编号,因此我可以正确地引用该复选框。

问题:有没有办法进行这种识别?是否有更好的方法直接读取工作表中的所有内容(包括是否选中复选框),还是必须分别执行这两项操作?

代码已完成:

Sub Test_retrieve()

' this will get all non object values from the sheet

Dim array_test As Variant
Dim i As Long, j As Long

array_test = ThisWorkbook.Sheets(1).UsedRange

For i = 1 To ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    For j = 1 To ThisWorkbook.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
        ThisWorkbook.Sheets(2).Cells(i, j) = array_test(i, j)
    Next j
Next i

End Sub


Sub getavticeboxvalue()

    ' this will get the names and values (as binary) of all the activex controlbox objects in the sheet

    Dim objx As Object
    Dim i As Long

    i = 1

    For Each objx In ThisWorkbook.Sheets(1).OLEObjects

        If objx.Object.Value = True Then
            ThisWorkbook.Sheets(3).Cells(i, 1).Value = 1
            ThisWorkbook.Sheets(3).Cells(i, 2).Value = objx.Name
            ThisWorkbook.Sheets(3).Cells(i, 3).Value = objx.Placement 'here is the issue

        ElseIf objx.Object.Value = False Then
            ThisWorkbook.Sheets(3).Cells(i, 1).Value = 0
            ThisWorkbook.Sheets(3).Cells(i, 2).Value = objx.Name
            ThisWorkbook.Sheets(3).Cells(i, 3).Value = objx.Placement 'here is the issue
        End If
        i = i + 1

    Next objx

End Sub

0 个答案:

没有答案