Как проверить, является ли объект пользовательской формой? - PullRequest
1 голос
/ 14 мая 2019

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

Основной метод принимает либо MSForms.Control или MSForms.UserForm как основной параметр.Чтобы учесть любую из этих опций, параметр передается как объект (см. Ниже).

Public Sub AddEventListner(ByRef ControlOrForm As Object)
  'Do next steps for adding listeners...
End Sub

Как проверить, была ли пользовательская форма объектом, который был передан?

Решение, которое я нашел, состоит в том, чтобы зациклить каждую пользовательскую форму в VBA.UserForms и проверить, соответствует ли имя переданному объекту. В настоящее время это работает для моих нужд;Тем не менее, я хочу посмотреть, есть ли более надежное решение , чем в зависимости от соответствия имени?

'CHECK TO SEE IF OBJ IS A USERFORM
Private Function IsUserform(ByRef Obj As Object) As Boolean

    Dim Form As Object
    For Each Form In VBA.UserForms

      'IF NAME MATCHES THEN IT MUST BE A USERFORM
      On Error GoTo NotUserform
      If Form.Name = Obj.Name Then
        IsUserform = True
        Exit Function
      End If

    Next

NotUserform:

End Function

1 Ответ

2 голосов
/ 14 мая 2019

Не проверял, но может быть что-то вроде этого:

Private Function IsUserform(ByRef Obj As Object) As Boolean

      If TypeOf Obj Is MSForms.UserForm Then
        IsUserform = True
      Else 
        IsUserform = False
      End If

End Function

По крайней мере, избегает петли.

Редактировать: В интересах краткого синтаксиса, функция ниже учитывает предложение @ADJ.

Private Function IsUserform(ByRef Obj As Object) As Boolean

      IsUserform = TypeOf Obj Is MSForms.UserForm

End Function
...