Ошибка 438 при попытке вызвать метод sub из класса модуля с параметрами - PullRequest
0 голосов
/ 13 июня 2019

Я получаю

ошибка 438: объект не поддерживает это свойство или метод

при попытке запустить следующий код. Не могли бы вы помочь мне с этим, пожалуйста?

Мой код макроса:

Sub test() 
   Dim upList As New ListRoot
   upList.msg 'this one works fine 

   Dim g As New Gradient
   upList.AppendRoot g 'line that raises the issue
End Sub

Код класса моего модуля:

Public Sub AppendRoot(grad As Gradient)
    If IsEmpty(content.content) Then
       Set content.content = grad
    Else
       content.Append (grad)
    End If
End Sub

Public Sub msg()
    MsgBox "HEY"
End Sub

Я уже пробовал разные вызовы моего метода:

upList.AppendRoot(g) 
Call upList.AppendRoot(g) 

и тот, который цитируется выше. Ни один не работает.

1 Ответ

0 голосов
/ 13 июня 2019

Обратите внимание, что вызов подфункции / функции без возврата значения должен вызываться без круглых скобок:

content.Append grad

Если функция возвращает какое-то значение, тогда скобки должны быть добавлены

ReturnValue = content.Append(grad)

Но если вы добавите круглые скобки к подпрограмме / функции, которая не вернет любое значение, как вы сделали

content.Append (grad)

…, которое заставляет переменную grad быть отправленнойByVal, в то время как ByRef является стандартным способом их отправки.Таким образом, добавив здесь круглые скобки, вы измените значение с ByRef на ByVal (вы также можете видеть пробел между именем функции / поднабора и круглыми скобками).


Пример:

Sub TestFunction(Param1, Param2, Param3) 'all 3 parameters are ByRef by default in VBA (not in VB.NET!)

End Sub

Некоторые примеры вызова этой функции:

'submit 3 parameters ByRef, don't return anything
TestFunction Param1, Param2, Param3 
TestFunction(Param1, Param2, Param3) 'throws error

'submit 3 parameters ByRef, return a Value
ReturnValue = TestFunction(Param1, Param2, Param3) 
ReturnValue = TestFunction Param1, Param2, Param3   'throws error 

'submit parameters 1 and 3 ByVal and 2 ByRef, don't return anything
TestFunction (Param1), Param2, (Param3) 

'submit parameters 1 and 3 ByVal and 2 ByRef, return a Value
ReturnValue = TestFunction((Param1), Param2, (Param3)) 

Хотя с 3 параметрами будет выдано сообщение об ошибке, если вы добавите круглые скобки там, где их не должно быть, с одним параметром будет сложнее,:

TestFunction Param1   'correct
TestFunction (Param1) 'this threw an error with 3 parameters, but does not throw an error 
                      'with one parameter instead it changes behavior ByRef to ByVal
ReturnValue = TestFunction(Param1) 'correct
ReturnValue = TestFunction Param1  'throws error 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...