Default-функция
От: Plac2006  
Дата: 09.03.07 22:44
Оценка:
Здравствуйте!

У меня появился такой вопрос при программировании в VBA в Excel.
Хочу передать в функция TextBox. Передаю по названию:

a = MyFunc(Textbox1)


Проблема заключается в том, что вместо TextBox1 программа видит его умолчательный член,
то есть TextBox1, и поэтому выдаёт ошибку. Как это можно исправить? Т.е. как передать сам TextBox?

Так же пробовал

Dim tb As TextBox
Set tb = TextBox1
a = MyFunc(tb)


Результат тот же...

Заранее спасибо.
Re: Default-функция
От: Vi2 Удмуртия http://www.adem.ru
Дата: 10.03.07 05:11
Оценка:
Здравствуйте, Plac2006, Вы писали:

P>a = MyFunc(Textbox1)


P>Проблема заключается в том, что вместо TextBox1 программа видит его умолчательный член,

P>то есть TextBox1, и поэтому выдаёт ошибку. Как это можно исправить? Т.е. как передать сам TextBox?

Нужно описывать или передавать в функцию правильные типы. Есть Object Browser (F2), если в нем в строке поиска написать "TextBox" и нажать "Поиск", он показывает, где такие типы есть. Так вот у меня есть и Excel.TextBox, и MSForms.TextBox. Раз есть несколько объявлений типа, то VB(A) использует первое встретившееся в списке References... Чтобы он не мучился, нужно явно описывать библиотеку, тип которой используется.
Function MyFunc(ByVal tbx As TextBox) As String

=> нужно что-то выбрать из этого

Function MyFunc(ByVal tbx As Excel.TextBox) As String
Function MyFunc(ByVal tbx As MSForms.TextBox) As String
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Default-функция
От: ali2  
Дата: 10.03.07 15:16
Оценка:
Здравствуйте, Vi2,

у меня, похоже, та же проблема (как передать TextBox в процедуру).
Для функции с заголовком

Public Function MyCheck(ByVal tbox As MSForms.TextBox) As Boolean

вызов а = MyCheck(MyTextBox) дает ошибку "Type mismatch".
Причина в том, что default property для TextBox — это Text,
вот VBA и пытается эту строку вставить при вызове функции.

Таким образом, Ваш совет мне не помогает.

Есть ли способ это преодолеть, т.е. как-то показать,
что я хочу передать объект TextBox, а не его default property?

С уважением,
Александр
Re[2]: Default-функция
От: ali2  
Дата: 10.03.07 16:44
Оценка:
Здравствуйте, Vi2,

прошу простить мою невнимательность: Ваш совет
решил проблему (я просто "не туда" смотрел). Виноват.

Хотя объяснить, почему так происходит, я не могу:
разве TextBox при передаче параметром в функцию не
будет как всегда заменяться default property?

> Раз есть несколько объявлений типа, то VB(A) использует

> первое встретившееся в списке References

В Object Browser объект TextBox у меня только один,
так что первый встретившийся будет как раз тот, что надо.
Почему же VBA недоволен без приставки MsForms к TextBox?

С уважением,
Александр
Re[3]: Default-функция
От: Бенедикт  
Дата: 12.03.07 09:18
Оценка:
Здравствуйте, ali2, Вы писали:

A>Хотя объяснить, почему так происходит, я не могу:

A>разве TextBox при передаче параметром в функцию не
A>будет как всегда заменяться default property?

Что значит — как всегда? Если параметр описан как объектный соответствующего типа или Variant, будет передана именно ссылка на экземпляр объекта.

>> Раз есть несколько объявлений типа, то VB(A) использует

>> первое встретившееся в списке References

A>В Object Browser объект TextBox у меня только один,

A>так что первый встретившийся будет как раз тот, что надо.
A>Почему же VBA недоволен без приставки MsForms к TextBox?

Включите показ скрытых членов классов (Show Hidden Members) в контекстном меню в Object Browser.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.