VBScript — передача объектов в подпрограмму или функцию

Я пытаюсь передать в функцию два объекта, но получаю сообщение об ошибке: "Неправильное количество аргументов или неверное назначение свойства: "пробел"

Я могу манипулировать этими объектами (Object1 и Object2), но не могу понять, как передать их в функцию.

Sub OnFormat

Dim Object1
Dim Object2

Set Object1 = rpt.Sections("Details").Controls("txtManufacturer")
Set Object2 = rpt.Sections("Details").Controls("Label36")



'Call Position(Object1,Object2)

'End Sub

'Sub Position(Object1,Object2)

If Object1.text = "" then 
 Object2.Visible = false 
 Object1.Visible = false 
else
 Object2.Top = space
 Object1.Top = space
 Object2.Visible = true 
 Object1.Visible = true
End If

End Sub

Следующий код работает без проблем, но когда вставляются комментарии, я получаю упомянутую выше ошибку.


person Al G Johnston    schedule 29.07.2013    source источник


Ответы (1)


В вашем коде есть оборванный «End Sub», вам нужно определение класса, а для объектных переменных требуется выражение «New ClassName». Итак, начните с чего-то вроде:

Option Explicit

Class cClass
  Public m_Prop
End Class ' cClass

Dim Object1
Dim Object2

Set Object1 = New cClass
Set Object2 = New cClass
Call Func(Object1,Object2)
WScript.Echo Object1.m_Prop, Object2.m_Prop

Sub Func(Object1,Object2)
  Object1.m_Prop = "A"
  Object2.m_Prop = Object1.m_Prop & "B"
End Sub

выход:

A AB

Обновление:

Верный способ получить указанную вами ошибку:

с = пробел ()

Номер ошибки: 450 Описание ошибки: Неверное количество аргументов или неверное назначение свойства

поэтому проверьте свой другой код на предмет незаконного использования функции Space().

Откуда берутся объекты и есть ли у вас доступ к определению класса, не имеет ничего общего с передачей их функции/подпрограмме.

Обновление II:

Не используйте пробел в качестве имени переменной (это конфликтует с функцией с таким именем).

person Ekkehard.Horner    schedule 29.07.2013
comment
Я забыл саб в начале. Я пытаюсь использовать уже созданный объект. Object1 и 2 — это компоненты, свойства которых я могу изменить, я просто хочу знать, как передать их в подпрограмму. - person Al G Johnston; 29.07.2013
comment
@AlGJohnston - мой код демонстрирует именно это: объекты передаются в Func(), изменяются там, и изменение отображается в операторе WScript.Echo верхнего уровня. Ошибка, которую вы получаете, вызвана кодом, который вы не опубликовали. - person Ekkehard.Horner; 29.07.2013
comment
Проблема в том, что компоненты предварительно создаются программой, которую я использую, поэтому у меня нет класса, из которого были получены объекты. - person Al G Johnston; 29.07.2013
comment
У меня нет буквы S. Я собираюсь опубликовать свой точный код. - person Al G Johnston; 29.07.2013
comment
@AlGJohnston - Space() - это функция; поэтому не используйте пробел в качестве имени переменной. - person Ekkehard.Horner; 29.07.2013
comment
@AlGJohnston Пожалуйста, рассмотрите возможность принять ответ, если он решил вашу проблему. - person Ansgar Wiechers; 29.07.2013