【发布时间】:2019-05-18 23:44:57
【问题描述】:
这个问题是我之前 2 个问题(Retrieving name and location of specific Shapes from worksheet with VBA 和 Retrieving information of OLEObjects from Workbook with VBA)的后续问题
场景:我正在尝试从工作表中检索数据,包括原始数据和形状(主要是复选框)。我正在使用以下代码来检索复选框:
Sub CheckboxLoop17()
Dim cb As Shape
Dim i As Long
i = 1
'Loop through Checkboxes
For Each cb In ThisWorkbook.Sheets(1).Shapes
ThisWorkbook.Sheets(4).Cells(i, 1).Value = cb.ControlFormat.Value
ThisWorkbook.Sheets(4).Cells(i, 2).Value = cb.Name
ThisWorkbook.Sheets(4).Cells(i, 3).Value = cb.BottomRightCell.Address
ThisWorkbook.Sheets(4).Cells(i, 4).Value = cb.Type
i = i + 1
Next cb
End Sub
运行时,代码在行中产生 Active 错误 438:
ThisWorkbook.Sheets(4).Cells(i, 1).Value = cb.ControlFormat.Value
我想从复选框中获取任何类型的值表示(真/假、是/否、1/0...)
问题:为什么会出现这个错误?如何解决这个问题?
【问题讨论】:
-
这很可能发生,因为您正在循环遍历所有形状并且其中一个形状不是控件。 '注意如果形状不是控件,ControlFormat 属性将失败。'
-
@user10798192 很可能。有没有其他方法可以直接检索形状的值?
-
您只是对复选框感兴趣吗?
-
@TinMan 我的工作表只有复选框形状,但有些是 Form,有些是 ActiveX。
-
最好使用
Sheets("Sheet1")按标签名称引用正确的工作表。Sheets(1)引用了标签顺序中的第一张表,用户可以重新排列(标签名称也可以)....也许最好使用表代号 -...In Sheet1.Shapes。代号是 VBE 中括号中的工作表名称 not。