У меня появился такой вопрос при программировании в VBA в Excel.
Хочу передать в функция TextBox. Передаю по названию:
a = MyFunc(Textbox1)
Проблема заключается в том, что вместо TextBox1 программа видит его умолчательный член,
то есть TextBox1, и поэтому выдаёт ошибку. Как это можно исправить? Т.е. как передать сам TextBox?
Так же пробовал
Dim tb As TextBox
Set tb = TextBox1
a = MyFunc(tb)
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
у меня, похоже, та же проблема (как передать TextBox в процедуру).
Для функции с заголовком
Public Function MyCheck(ByVal tbox As MSForms.TextBox) As Boolean
вызов а = MyCheck(MyTextBox) дает ошибку "Type mismatch".
Причина в том, что default property для TextBox — это Text,
вот VBA и пытается эту строку вставить при вызове функции.
Таким образом, Ваш совет мне не помогает.
Есть ли способ это преодолеть, т.е. как-то показать,
что я хочу передать объект TextBox, а не его default property?
прошу простить мою невнимательность: Ваш совет
решил проблему (я просто "не туда" смотрел). Виноват.
Хотя объяснить, почему так происходит, я не могу:
разве TextBox при передаче параметром в функцию не
будет как всегда заменяться default property?
> Раз есть несколько объявлений типа, то VB(A) использует > первое встретившееся в списке References
В Object Browser объект TextBox у меня только один,
так что первый встретившийся будет как раз тот, что надо.
Почему же VBA недоволен без приставки MsForms к TextBox?
Здравствуйте, 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.