在使用set之前检查对象是否存在的最佳方法是什么?
我有很多工作簿,其中包含复选框和选项按钮。 我有一个数组,其中包含不同工作簿可能具有的复选框和选项按钮的所有可能名称的列表
为了明确我的问题,让我们假设我有
sArray(i) = "CheckBox15"
当我这样做
Set s = .OLEObjects(sArray(i))
给我一个错误1004 。
我想在下面的代码中添加一行内容:
如果当前工作表(ws)上存在“ CheckBox15”,则设置....是否有任何命令检查对象是否存在?
'ws is the worksheet
Dim s As OLEObject
Dim i As Long
with ws
For i = 0 To UBound(sArray)
Set s = .OLEObjects(sArray(i))
If s.Object.Value = True Then
GetOptionCheck = GetOptionCheck & s.Object.Caption
End If
Next i
end with
答案 0 :(得分:3)
您可以构建自定义布尔函数以进行快速检查:
Public Function objectExists(ByRef ws As Worksheet, ByVal someName As String) As Boolean
On Error GoTo objectExists_Error
Dim someOle As OLEObject
Set someOle = ws.OLEObjects(someName)
objectExists = True
On Error GoTo 0
Exit Function
objectExists_Error:
objectExists = False
End Function
像这样打电话:
Sub TestMe()
Dim s As OLEObject
Dim i As Long
Dim ws As Worksheet: Set ws = Worksheets(1)
Dim someArray As Variant
someArray = Array("CheckBox1", "CheckBox2", "CheckBox3", "CheckBox4")
With ws
For i = LBound(someArray) To UBound(someArray)
If objectExists(ws, someArray(i)) Then
Set s = .OLEObjects(someArray(i))
Debug.Print s.object.Caption
End If
Next i
End With
End Sub