Как записать данные из Texbox-ов в массив?

Программирование на Visual Basic for Applications
Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Как записать данные из Texbox-ов в массив?

Сообщение Bagathur » 25.08.2006 (Пт) 12:10

Есть форма, содержащая до 80 TextBox-ов с Названиями ТБ1(01-40) и ТБ2(01-40). Как записать их Text в двумерный массив попарно? Чтобы значение ТБ101 было в той же строке, что и ТБ201?
Кроме этих Texbox-ов есть другие, значения которых записывать не нужно.
Пробовал через For Each Control In UserForm.Controls, но не получается - естесственно, выдаёт ошибко при попытке вызвать .Text у тех Controls, которые такого свойства не имеют.
For Each TextBox вообще отказывается работать, фильтрация по Control.Name тоже оказалась неудачной.
Нет ли возможности написать что-то вроде
For i=1 to 40
aryChange (i, 1) = ТБ1 & i
aryChange (i, 2) = ТБ2 & i
Next

Пока что пишу в массив вручную, перебирая по одному все 80 нужных TextBox-ов.
Искал в поиске, но что-то он как-то странно тут работает.
'Til the blood on your hans is the blood of the King!

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

Сообщение alibek » 25.08.2006 (Пт) 12:22

Проверяй тип контрола через TypeOf.
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Re: Как записать данные из Texbox-ов в массив?

Сообщение Nicky » 25.08.2006 (Пт) 12:24

Bagathur писал(а):...Пробовал через For Each Control In UserForm.Controls, но не получается - естесственно, выдаёт ошибко при попытке вызвать .Text у тех Controls, которые такого свойства не имеют.
...

Код: Выделить всё
If TypeOf Control Is TextBox Then

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 12:42

А как отсекать те TextBox-ы, значения из которых не нужны?
Можно как-нибудь фильтровать Controls по свойству Name?
'Til the blood on your hans is the blood of the King!

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 13:02

Хм. Чтот не работает TypeOf - для всех элементов выдаёт что они не TextBox-ы. Вместо Control показывает забитые в бокс данные.
'Til the blood on your hans is the blood of the King!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 25.08.2006 (Пт) 13:13

что-нибудь в этом духе:

Код: Выделить всё
Private Sub UserForm_Initialize()
    Dim tb As Control
    For Each tb In Controls
        If TypeOf tb Is msforms.TextBox Then
            Select Case True
            Case tb.Name Like "TextBox#*"
                tb = tb.Name
            End Select
        End If
    Next tb
End Sub

или
Код: Выделить всё
Private Sub UserForm_Initialize()
    Dim tb As Control
    For Each tb In Controls
        If TypeOf tb Is msforms.TextBox Then
            Select Case Mid(tb.Name, 8, 255)
            Case 1, 3 To 5, 7
                tb = tb.Name
            End Select
        End If
    Next tb
End Sub
Привет,
KL

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 25.08.2006 (Пт) 13:16

можно еще так:

Код: Выделить всё
Private Sub UserForm_Initialize()
    Dim tb As Control
    For Each tb In Controls
        If TypeOf tb Is msforms.TextBox Then
            Select Case tb.Name
            Case "TextBox22", "TextBox134", "TextBox346"
                tb = tb.Name
            End Select
        End If
    Next tb
End Sub
Привет,
KL

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 26.08.2006 (Сб) 1:38

Всё круто, всё работает! Даже фильтрация по именам элементов.
Спасибо.
Особенно - Лапинку за хинт с "msforms.TextBox" - без него ничего не работало, а сам я правильного ответа (msforms) наверняка бы не нашёл.
'Til the blood on your hans is the blood of the King!


Вернуться в VBA

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

Сейчас этот форум просматривают: Yandex-бот и гости: 53

    TopList