VBA - вызов функции, которая принимает родительский объект как переменную - PullRequest
0 голосов
/ 15 ноября 2009

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

Модуль 1 Код:

Function IsProduct() as Boolean
    IsProduct = (vartype(Parent.Value) <> vbEmpty)
End Function
' "Parent" in this case would be a Range '

Код модуля 2:

Dim myRng as Range
If myRng.IsProduct Then Debug.Print "'Tis a product, sir."

Ответы [ 2 ]

1 голос
/ 15 ноября 2009

Вы можете использовать ключевое слово Me внутри класса для ссылки на класс. Как

IsProduct = IsEmpty(Me.Value)

Вы можете смоделировать расширение собственных классов в VBA. Создайте класс с именем cRange и присвойте ему два свойства: Range и IsProduct

Private mclsRange As Range

Private Sub Class_Terminate()

    Set mclsRange = Nothing

End Sub

Public Property Get Range() As Range

    Set Range = mclsRange

End Property

Public Property Set Range(clsRange As Range)

    Set mclsRange = clsRange

End Property

Public Property Get IsProduct() As Boolean

    IsProduct = IsEmpty(Me.Range.Value)

End Property

Теперь вы можете использовать свойство Range, чтобы получить доступ ко всем встроенным свойствам и методам нативного объекта Range и создать любые другие свойства (например, IsProduct), которые вам нужны.

1 голос
/ 15 ноября 2009

Я не до конца понял ваш вопрос; насколько я знаю, вы не можете расширять существующие классы методами VBA. Может быть, вы хотите что-то подобное?

Модуль 1:

Function IsProduct(parent As Object) as Boolean
    IsProduct = (vartype(parent.Value) <> vbEmpty)
End Function
' This can take a Range as well as other objects as a parameter

Модуль 2:

Dim myRng as Range
If IsProduct(myRng) Then Debug.Print "'Tis a product, sir."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...