Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA在设置前检查对象是否存在_Excel_Vba - Fatal编程技术网

Excel VBA在设置前检查对象是否存在

Excel VBA在设置前检查对象是否存在,excel,vba,Excel,Vba,在对对象使用set之前,检查对象是否存在的最佳方法是什么 我有很多工作簿,它们包含复选框和选项按钮。 我有一个数组,其中包含不同工作簿可能具有的复选框和选项按钮的所有可能名称的列表 为了澄清我的问题,让我们假设我有 sArray(i) = "CheckBox15" 当我这样做的时候 Set s=.OLEObjects(sArray(i)) 当活动工作表中没有名为“CheckBox15”的复选框时,正在给我一个错误1004 我想在下面的代码中添加一行,告诉您: 如果当前工作表(ws)上存在“Ch

在对对象使用set之前,检查对象是否存在的最佳方法是什么

我有很多工作簿,它们包含复选框和选项按钮。 我有一个数组,其中包含不同工作簿可能具有的复选框和选项按钮的所有可能名称的列表

为了澄清我的问题,让我们假设我有

sArray(i) = "CheckBox15"
当我这样做的时候

Set s=.OLEObjects(sArray(i))

当活动工作表中没有名为“CheckBox15”的复选框时,正在给我一个错误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

您可以构建自定义布尔函数以进行快速检查:

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

谢谢,你的解决方案很好,我会选择是作为选定的解决方案