VBA проверяет, существует ли объект до установки - PullRequest
0 голосов
/ 01 марта 2019

Каков наилучший способ проверить, существует ли объект, перед тем, как использовать его для установки?

У меня много рабочих книг, они содержат флажки и кнопки выбора.У меня есть массив, который содержит список всех возможных имен флажков и кнопок выбора, которые могут иметь разные книги

, чтобы прояснить мой вопрос, давайте предположим, что у меня есть

sArray(i) = "CheckBox15"

, когдаЯ

Set s = .OLEObjects(sArray(i))

выдаёт мне ошибку 1004 , когда на активном листе нет флажка с именем "CheckBox15".

то, что я хочу в моем коде ниже, это добавить строку, которая говорит:

, если "CheckBox15" существует на текущем листе (ws), затем установить .... есть ли команда, которая проверяет, существует ли объект?

'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

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете создать пользовательскую логическую функцию для быстрой проверки:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...