设想:我正在尝试使用 VBA(最初是 Python,但我找不到方法来执行此操作)读取所有信息或工作表。由于我必须读取的工作表具有不同的格式并且通常很混乱,因此我循环遍历工作表中的所有对象,获取它们的名称和值(检查或不检查,作为二进制文件)。
Issue:这些盒子通常是乱序的,所以我无法知道什么是按什么顺序进来的。所以我试图检索一些基本形式的位置或对其周围单元格的引用。
我尝试过的:按照文档(https://learn.microsoft.com/en-us/office/vba/api/excel.oleobjects https://learn.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