Название элемена управления - как переменная

Программирование на Visual Basic for Applications
Brudda
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 21.02.2005 (Пн) 14:47
Откуда: Рига

Название элемена управления - как переменная

Сообщение Brudda » 21.02.2005 (Пн) 15:06

Привет!
Может подскажет кто, как решить такую проблему: есть функция, в которую качестве параметра необходимо передать название(?) элемента управления, скажем, ЭдитБокс. Суть в том, что одни и те же действия производятся с разными элементами. Я понимаю, что название элемента необходимо присвоить переменной - а вот как это сделать?
Заранее спасибо,
Brudda

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.02.2005 (Пн) 15:07

Объяви аргумент функции как TextBox, Control или Object, тогда ты сможешь просто передавать этот объект.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.02.2005 (Пн) 15:20

Дополню.
В VBA есть небольшой глючок с этим делом. Процедура
Код: Выделить всё
sub foo(byval t as TextBox)
end sub
прекрасно проглатывается компилятором, но при попытке её вызова происходит ошибка 13 - несоответствие типов.
Чтобы от неё избавиться, нужно объявлять
Код: Выделить всё
sub foo(byval t as MSForms.TextBox)
end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Brudda
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 21.02.2005 (Пн) 14:47
Откуда: Рига

Сообщение Brudda » 21.02.2005 (Пн) 15:22

Спасибо.
Видимо, вопорос по-дурацки задан. Вот кусочек кода (не работает):

Private Sub CommandButton1_Click()
Dim chk As Object
chk = UserForm1.TextBox1 //тут вышибает
HideBox (chk)
End Sub

Public Sub HideBox(aaa As Object)
aaa.Visible = False
End Sub

Где тут ошибка?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.02.2005 (Пн) 15:26

Private Sub CommandButton1_Click()
HideBox TextBox1
End Sub

Public Sub HideBox(aaa As Object)
aaa.Visible = False
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Brudda
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 21.02.2005 (Пн) 14:47
Откуда: Рига

Сообщение Brudda » 21.02.2005 (Пн) 15:31

Так, проблема то в том, что вместо TextBox1 может появиться TextBox2 или любой другой элемент. Там переменную надо, как мне кажется :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.02.2005 (Пн) 15:34

Не надо переменную. Просто пиши имя объекта как параметр процедуры.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.02.2005 (Пн) 15:37

Я понял :)
.Controls("TextBox1")
Lasciate ogni speranza, voi ch'entrate.

Brudda
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 21.02.2005 (Пн) 14:47
Откуда: Рига

Сообщение Brudda » 21.02.2005 (Пн) 15:41

Тогда нет смысла - все равно для каждого элемента отдельную процедуру писать придется. А идея была - сократить код и, в зависимости от ситуации, та же самая процедура обрабатывал тот или иной элемент. Может можно через переменную как-нибудь?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.02.2005 (Пн) 15:42

Короче :)
В чём задача?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Brudda
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 21.02.2005 (Пн) 14:47
Откуда: Рига

Сообщение Brudda » 21.02.2005 (Пн) 15:57

Достал? :)
Есть несколько TextBox, после ввода данных программа проверяет наличие недопустимых символов и при наличии таковых, программа выбрасывает сообщение, чистит TextBox и еще ряд процедур. Можно написать код отдельно для каждого TextBox и все будет работать. А я пытаюсь сделать это как процедуру и передавать TextBox как параметр. Да, в программе TextBox"ы имеют смысловые названия и не все из имеющихся TextBox подвергаются проверке. Такой вот винегрет.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.02.2005 (Пн) 15:58

Так в чем проблема? Тебе дали два варианта, любой из них подходит.
Lasciate ogni speranza, voi ch'entrate.

Brudda
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 21.02.2005 (Пн) 14:47
Откуда: Рига

Сообщение Brudda » 21.02.2005 (Пн) 15:58

Забыл - это все на форме.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.02.2005 (Пн) 16:01

Ну и?

sub test
check textbox1
check textbox2
check textbox3
end sub

sub check(byval t as msforms.textbox)

end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Brudda
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 21.02.2005 (Пн) 14:47
Откуда: Рига

Сообщение Brudda » 21.02.2005 (Пн) 16:05

Мда...
мне похоже отдохнуть надо. Зациклился.
Спасибо.
Brudda


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList  
cron