Динамические имена объектов

Программирование на Visual Basic for Applications
grigrim
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 21.09.2007 (Пт) 19:16

Динамические имена объектов

Сообщение grigrim » 23.09.2007 (Вс) 22:18

Подскажите, как динамически менять имена объектов? Это, например, для цикла нужно.
Чтобы не писать вот так:
Код: Выделить всё
ActiveDocument.TextBox2.Text = ""
ActiveDocument.TextBox3.Text = ""
ActiveDocument.TextBox4.Text = ""

Можно было бы написать как-нибудь так (во флеше так):
Код: Выделить всё
For i=2 To 4
     ActiveDocument["TextBox"+i].Text = ""
Next i

А есть ли что-либо подобное в VBA?

grigrim
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 21.09.2007 (Пт) 19:16

Сообщение grigrim » 25.09.2007 (Вт) 8:13

Может быть это делается через FormFields или Controls.
Как нибудь так:
Код: Выделить всё
ActiveDocument.FormFields("TextBox"+str(i)).Text = ""

Или так:
Код: Выделить всё
ActiveDocument.Controls("TextBox"+str(i)).Text = ""


Ну так что, знает кто-нибудь ответ?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 25.09.2007 (Вт) 8:25

Кажется, нету... Первое что приходит в голову - импортировать текстбоксы из "большого" VB, у которых есть свойство Index :roll:
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

grigrim
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 21.09.2007 (Пт) 19:16

Сообщение grigrim » 25.09.2007 (Вт) 9:53

Даже странно. А как тогда мне обратиться к новому объекту TextBox, который был получен копированием уже существующего объекта TextBox2? Ведь я не знаю имени нового объекта.
А как можно импортировать текстбоксы из "большого" ВБ? Например?

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 25.09.2007 (Вт) 10:44

Очистка 5-ти TextBox'ов
Код: Выделить всё
Private Sub CommandButton1_Click()
Dim i%
    For i = 1 To 5   'или Me.Controls.Count
        Me.Controls("TextBox" & i).Value = ""
    Next
End Sub



P.S. может пригодится

'1) способ, как можно с помощью цикла забить инфо из массива сразу во много TextBox'ов
Код: Выделить всё
Dim iMassiv$(1 To 30)
For iCount% = 1 To 30   'или Userform1.Controls.count
    Me.Controls("TextBox" & iCount%).Value = iMassiv$(iCount%)
    Me.Controls("ComboBox" & iCount%).List = iMassiv$
Next


'2) способ, как можно с помощью цикла забить инфо из массива сразу во вмого TextBox'ов
'UserForm.Controls(i) i- или номер или название в кавычках.
'Так как, Controls это все элементы на форме, то можно названия в цикле перебирать, типа "Name"& cstr(i) и, ессно, присвоить TextBox'ам названия Name1, Name2 и т.д.
Код: Выделить всё
For i=1 to Userform1.Controls.count
    Userform1.Controls("Name"& cstr(i)).text = Array(i)
Next

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 28.09.2007 (Пт) 10:41

А как сделать то же самое, но для элементов, расположенных непосредственно на листе, вот как раз столкнулся с этим.... ??

Такой синтаксис не проходит :-(
CurrStr="tbAddr"
ActiveSheet.Controls(CurrStr).Text = ""

Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 09.09.2006 (Сб) 18:03

Сообщение Template » 28.09.2007 (Пт) 12:29

to grigrim

Код: Выделить всё
Dim InSh As InlineShape
For Each InSh In ActiveDocument.InlineShapes
    Select Case InSh.OLEFormat.Object.Name
       Case "TextBox2" To "TextBox40"
       InSh.OLEFormat.Object.Text = ""
    End Select
Next


to @Nik

Код: Выделить всё
ActiveSheet.Pictures("TextBox1").Object.Text = ""

ActiveSheet.OLEObjects("TextBox1").Object.Text = ""

ActiveSheet.Shapes("TextBox1").DrawingObject.Object.Text = ""

ActiveSheet.Shapes("TextBox1").OLEFormat.Object.Object.Text = ""

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 04.10.2007 (Чт) 9:11

Спасибо огромное ! (лучше поздно, чем никогда ;-) )


Вернуться в VBA

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

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

    TopList