Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2010, 20:05   #1
boris-blade
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 53
По умолчанию Элементы в форме - массив?

У меня в форме много однотипных элементов - текстбоксов, чекбоксов и тп. Они имеют дефолтные имена: textbox1, textbox2, textboxN.
Не существует ли системного массива
form1.textbox(N-1) as textbox
или чего-то типа этого, чтобы я мог работать с элментами например в цикле
for i=1 to 10
form1.textbox(i) =i*i
next i
boris-blade вне форума Ответить с цитированием
Старый 22.01.2010, 21:00   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Код переключающий все элементы CheckBox расположенные в рамке F и у которых поле Tag равно 1

Код:
Sub Form_ChieldsChecked(ByRef F As MSForms.Frame)

Dim C As MSForms.Control
Dim B As MSForms.CheckBox
    
    For Each C In F.Controls
        On Error Resume Next
        Set B = C
        If Err.Number <> 0 Then
        ElseIf B.Tag <> "1" Then
        Else
            B.Value = not B.Value
        End If
    Next C

End Sub
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 22.01.2010, 22:42   #3
boris-blade
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Код переключающий все элементы CheckBox расположенные в рамке F и у которых поле Tag равно 1

Код:
Sub Form_ChieldsChecked(ByRef F As MSForms.Frame)

Dim C As MSForms.Control
Dim B As MSForms.CheckBox
    
    For Each C In F.Controls
        On Error Resume Next
        Set B = C
        If Err.Number <> 0 Then
        ElseIf B.Tag <> "1" Then
        Else
            B.Value = not B.Value
        End If
    Next C

End Sub
1 че код-то такой ненаглядный - не лучше ли так:
If Err.Number <> 0 and B.Tag = "1" Then
B.Value = not B.Value

2 это был прямой перебор всех чекбоксов. а мне нужна возможность прямого обращения к каждому отдельному элементу по какому-либо индексу, как к элементу массива.
boris-blade вне форума Ответить с цитированием
Старый 23.01.2010, 07:18   #4
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от boris-blade Посмотреть сообщение
2 это был прямой перебор всех чекбоксов. а мне нужна возможность прямого обращения к каждому отдельному элементу по какому-либо индексу, как к элементу массива.
Да, пожалуйста: Controls.Item(Индекс)
Встроенная коллекция - это только Controls.
Можешь создать свою коллекцию (Collection) и работать с ней как с массивом.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/

Последний раз редактировалось Вождь; 23.01.2010 в 07:21.
Вождь вне форума Ответить с цитированием
Старый 23.01.2010, 11:40   #5
boris-blade
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Да, пожалуйста: Controls.Item(Индекс)
Встроенная коллекция - это только Controls.
Можешь создать свою коллекцию (Collection) и работать с ней как с массивом.
Напиши, пожалуйста, как создать коллекцию? Вот есть у меня два текстовых поля textbox1 и textbox2. Нужно, чтобы работало
tbox(1)="sgsgr"
tbox(2)="dfsbdfbg"
напиши весь код, плиз
а то я не нашел как сделать коллецию
boris-blade вне форума Ответить с цитированием
Старый 23.01.2010, 12:03   #6
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию Примеры

Пример 1 - массив
Код:
Dim A(1 To 2) As MSForms.TextBox
    
    Set A(1) = Me.TextBox1...
    Set A(2) = Me.TextBox2...

    A(1).Text = "Тест 1"
    A(2).Text = "Тест 2"
Пример 2 - коллекция
Код:
Dim C As New Collection
    
    C.Add Item:=Me.TextBox1... ', Key:=, Before:=, After:=
    C.Add Item:=Me.TextBox1... ', Key:=, Before:=, After:=
    
    C(1).Text = "Тест 1"
    C.Item(2).Text = "Тест 2"
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 23.01.2010, 12:18   #7
boris-blade
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 53
По умолчанию

Спасибо - мне подходит первый вариант
Хочу циклом заполнить массив
for i=1 to 10
set A(i)=(Me.TextBox+"i")
next i

как это сделать?
boris-blade вне форума Ответить с цитированием
Старый 23.01.2010, 12:45   #8
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию Вернемся к нашим баранам

Цитата:
Сообщение от boris-blade Посмотреть сообщение
for i=1 to 10
set A(i)=(Me.TextBox+"i")
next i

как это сделать?
Вот-вот Для этого я и давал первый пример. Подправим его:
Код:
Option Base 0
...
Dim C As MSForms.Control
Dim TB As MSForms.TextBox
Dim A() as MSForms.TextBox
Dim N&

    N=-1 ' = Base - 1
    For Each C In Me.Controls
        On Error Resume Next
        Set TB = C
        If Err.Number = 0 Then
            N = N + 1
            ReDim Preserve A(N)
            Set A(N) = TB
        End If
    Next C
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поместить элементы в массив? tocsik Общие вопросы Delphi 4 28.09.2009 19:15
Элементы управления в форме! Rom1k06 Microsoft Office Excel 10 30.04.2009 21:33
как перебрать все элементы на форме? Аlex Общие вопросы C/C++ 1 07.02.2009 03:46
Ввести двумерный массив и поменять в нём местами элементы Ku6ep Помощь студентам 3 23.12.2008 18:25
двумерный массив, особые элементы Puffy Помощь студентам 2 25.05.2008 10:46