Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/TabIndex - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
TabIndex
diJi00 Дата: Воскресенье, 06.10.2013, 20:14 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Суть проблемы в том, что изначально форма была составлена без особых наворотов в виде вкладок (страниц) и фреймов, но сейчас с добавлением функций в форму, место на ней стало не хватать. Программный код зависим от TabIndex, а он на каждом новом фрейме и новой странице обнуляется. Как-то можно это обойти не переписывая код c нуля?
Может как-то программно можно присвоить? Изменение в Свойствах не даёт результата
 
Ответить
СообщениеСуть проблемы в том, что изначально форма была составлена без особых наворотов в виде вкладок (страниц) и фреймов, но сейчас с добавлением функций в форму, место на ней стало не хватать. Программный код зависим от TabIndex, а он на каждом новом фрейме и новой странице обнуляется. Как-то можно это обойти не переписывая код c нуля?
Может как-то программно можно присвоить? Изменение в Свойствах не даёт результата

Автор - diJi00
Дата добавления - 06.10.2013 в 20:14
ikki Дата: Воскресенье, 06.10.2013, 20:20 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Программный код зависим от TabIndex

а TabIndex-ы у вас периодически меняются во время исполнения?
или настраиваются в режиме конструктора?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 06.10.2013, 20:46
 
Ответить
Сообщение
Программный код зависим от TabIndex

а TabIndex-ы у вас периодически меняются во время исполнения?
или настраиваются в режиме конструктора?

Автор - ikki
Дата добавления - 06.10.2013 в 20:20
diJi00 Дата: Воскресенье, 06.10.2013, 20:25 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ikki, в конструкторе присваивалось всё изначально
[vba]
Код
Sub Class_Activate()
'Активация переменной модуля класса
     Dim ctl As Control, i As Byte
     For Each ctl In Controls
         If ctl.TabIndex < 42 Then
             i = ctl.TabIndex + 1
             Set aoTxtBxes(i).oTxtBx = ctl
         End If
     Next
End Sub
[/vba]
 
Ответить
Сообщениеikki, в конструкторе присваивалось всё изначально
[vba]
Код
Sub Class_Activate()
'Активация переменной модуля класса
     Dim ctl As Control, i As Byte
     For Each ctl In Controls
         If ctl.TabIndex < 42 Then
             i = ctl.TabIndex + 1
             Set aoTxtBxes(i).oTxtBx = ctl
         End If
     Next
End Sub
[/vba]

Автор - diJi00
Дата добавления - 06.10.2013 в 20:25
diJi00 Дата: Воскресенье, 06.10.2013, 20:29 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Может в свойствах есть другой параметр которым можно заменить табиндекс?
 
Ответить
СообщениеМожет в свойствах есть другой параметр которым можно заменить табиндекс?

Автор - diJi00
Дата добавления - 06.10.2013 в 20:29
AndreTM Дата: Воскресенье, 06.10.2013, 20:30 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Можно ещё вместо TabIndex'ов, при инициализации формы - динамически строить массив(ы) контролов, а затем работать уже с ними. Получится так, что вы вместо некоего бывшего "общего" TabIndex сможете использовать индекс в массиве(ах).


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеМожно ещё вместо TabIndex'ов, при инициализации формы - динамически строить массив(ы) контролов, а затем работать уже с ними. Получится так, что вы вместо некоего бывшего "общего" TabIndex сможете использовать индекс в массиве(ах).

Автор - AndreTM
Дата добавления - 06.10.2013 в 20:30
RAN Дата: Воскресенье, 06.10.2013, 20:31 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
в виде вкладок (страниц) и фреймов

Кодом обрабатывать - хуже нет.
Ошибка может выскочить на ровном месте.
Вкладки, вроде, еще туды-сюды, но фреймы... :(

TabIndex сможете использовать


Не сможете. Во всяком случае так, как ожидаете. Фреймы перехватывают.
Проверено. Наелся.

В качестве примера. (тему не помню)

4 тексбокса.
Если они все на форме - все работает.
Но если они на фрейме, то событие Exit последнего текстбокса не работает, а работает событие Exit фрейма. (Ну, или что-то вроде того, не помню точно)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 06.10.2013, 20:38
 
Ответить
Сообщение
в виде вкладок (страниц) и фреймов

Кодом обрабатывать - хуже нет.
Ошибка может выскочить на ровном месте.
Вкладки, вроде, еще туды-сюды, но фреймы... :(

TabIndex сможете использовать


Не сможете. Во всяком случае так, как ожидаете. Фреймы перехватывают.
Проверено. Наелся.

В качестве примера. (тему не помню)

4 тексбокса.
Если они все на форме - все работает.
Но если они на фрейме, то событие Exit последнего текстбокса не работает, а работает событие Exit фрейма. (Ну, или что-то вроде того, не помню точно)

Автор - RAN
Дата добавления - 06.10.2013 в 20:31
ikki Дата: Воскресенье, 06.10.2013, 20:36 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Может как-то программно можно присвоить?

думаю, что нет. точнее - может быть, и можно, но результат будет такой же.

чтобы не менять сильно код, попробуйте использовать свойство Tag.
насколько мне помнится - оно есть у каждого стандартного контрола, а значения можно задавать произвольные.
в том числе - совпадающие со значениями TabIndex.
тогда вам достаточно будет один раз произвести глобальную замену в коде для всего проекта строки .TabIndex на .Tag

пс. вариант "не ахти", поэтому подождите и другие варианты.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 06.10.2013, 20:37
 
Ответить
Сообщение
Может как-то программно можно присвоить?

думаю, что нет. точнее - может быть, и можно, но результат будет такой же.

чтобы не менять сильно код, попробуйте использовать свойство Tag.
насколько мне помнится - оно есть у каждого стандартного контрола, а значения можно задавать произвольные.
в том числе - совпадающие со значениями TabIndex.
тогда вам достаточно будет один раз произвести глобальную замену в коде для всего проекта строки .TabIndex на .Tag

пс. вариант "не ахти", поэтому подождите и другие варианты.

Автор - ikki
Дата добавления - 06.10.2013 в 20:36
diJi00 Дата: Воскресенье, 06.10.2013, 20:41 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ikki, сенк буду пробовать
 
Ответить
Сообщениеikki, сенк буду пробовать

Автор - diJi00
Дата добавления - 06.10.2013 в 20:41
diJi00 Дата: Воскресенье, 06.10.2013, 20:58 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
параметр .tag формула не считает
[vba]
Код
Sub Class_Activate()
'Активация переменной модуля класса
     Dim ctl As Control, i As Byte
     For Each ctl In Controls
         If ctl.Tag < 42 Then
             i = ctl.Tag + 1
             Set aoTxtBxes(i).oTxtBx = ctl
         End If
     Next
End Sub
[/vba]

В условии ошибка
 
Ответить
Сообщениепараметр .tag формула не считает
[vba]
Код
Sub Class_Activate()
'Активация переменной модуля класса
     Dim ctl As Control, i As Byte
     For Each ctl In Controls
         If ctl.Tag < 42 Then
             i = ctl.Tag + 1
             Set aoTxtBxes(i).oTxtBx = ctl
         End If
     Next
End Sub
[/vba]

В условии ошибка

Автор - diJi00
Дата добавления - 06.10.2013 в 20:58
diJi00 Дата: Воскресенье, 06.10.2013, 21:00 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Так понимаю остается расписать каждый контрол ((
 
Ответить
СообщениеТак понимаю остается расписать каждый контрол ((

Автор - diJi00
Дата добавления - 06.10.2013 в 21:00
ikki Дата: Воскресенье, 06.10.2013, 21:12 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
мда.
тип свойства Tag - string
пробуем так (при условии, что в Tag для всех контролов хранятся числа):
[vba]
Код
...
If Val(ctl.Tag) < 42 Then
       i = Val(ctl.Tag) + 1
       ...
[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 06.10.2013, 21:17
 
Ответить
Сообщениемда.
тип свойства Tag - string
пробуем так (при условии, что в Tag для всех контролов хранятся числа):
[vba]
Код
...
If Val(ctl.Tag) < 42 Then
       i = Val(ctl.Tag) + 1
       ...
[/vba]

Автор - ikki
Дата добавления - 06.10.2013 в 21:12
diJi00 Дата: Воскресенье, 06.10.2013, 21:18 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
в .tag стоят везде цифры, я их продублировал с indextaba

[vba]
Код
Set aoTxtBxes(i).oTxtBx = ctl
[/vba]
13:Type mismatch


Сообщение отредактировал diJi00 - Воскресенье, 06.10.2013, 21:23
 
Ответить
Сообщениев .tag стоят везде цифры, я их продублировал с indextaba

[vba]
Код
Set aoTxtBxes(i).oTxtBx = ctl
[/vba]
13:Type mismatch

Автор - diJi00
Дата добавления - 06.10.2013 в 21:18
ikki Дата: Воскресенье, 06.10.2013, 21:23 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
контролы - это не только текстбоксы.
а aoTxtBxes(i).oTxtBx, видимо, имеет жестко заданный тип?
нужна доп.проверка на тип контрола.
вобщем, я ж говорил - "вариант не ахти".
но обойти можно.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеконтролы - это не только текстбоксы.
а aoTxtBxes(i).oTxtBx, видимо, имеет жестко заданный тип?
нужна доп.проверка на тип контрола.
вобщем, я ж говорил - "вариант не ахти".
но обойти можно.

Автор - ikki
Дата добавления - 06.10.2013 в 21:23
diJi00 Дата: Воскресенье, 06.10.2013, 21:29 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ikki, у меня только текст боксы!, чекбары и опции, идут отдельно. c индекстагом все работало с минимальным кодом. а сейчас 59 позиций будет долговато расписывать)
 
Ответить
Сообщениеikki, у меня только текст боксы!, чекбары и опции, идут отдельно. c индекстагом все работало с минимальным кодом. а сейчас 59 позиций будет долговато расписывать)

Автор - diJi00
Дата добавления - 06.10.2013 в 21:29
ikki Дата: Воскресенье, 06.10.2013, 21:31 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
файл можете прикрепить на форум?
или на почту кинуть?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениефайл можете прикрепить на форум?
или на почту кинуть?

Автор - ikki
Дата добавления - 06.10.2013 в 21:31
diJi00 Дата: Воскресенье, 06.10.2013, 21:36 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ikki, файлы не крепятся почему-то. отправил на маил


Сообщение отредактировал diJi00 - Воскресенье, 06.10.2013, 21:42
 
Ответить
Сообщениеikki, файлы не крепятся почему-то. отправил на маил

Автор - diJi00
Дата добавления - 06.10.2013 в 21:36
ikki Дата: Воскресенье, 06.10.2013, 22:05 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
у меня так заработало:
[vba]
Код
Sub Class_Activate()
'Активация переменной модуля класса
     Dim ctl As Control, i As Byte
     For Each ctl In Controls
         If ctl.Tag > "" Then
             If Val(ctl.Tag) < 42 Then
                 i = Val(ctl.Tag) + 1
                 Set aoTxtBxes(i).oTxtBx = ctl
             End If
         End If
     Next
End Sub
[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеу меня так заработало:
[vba]
Код
Sub Class_Activate()
'Активация переменной модуля класса
     Dim ctl As Control, i As Byte
     For Each ctl In Controls
         If ctl.Tag > "" Then
             If Val(ctl.Tag) < 42 Then
                 i = Val(ctl.Tag) + 1
                 Set aoTxtBxes(i).oTxtBx = ctl
             End If
         End If
     Next
End Sub
[/vba]

Автор - ikki
Дата добавления - 06.10.2013 в 22:05
AndreTM Дата: Воскресенье, 06.10.2013, 22:06 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Не сможете. Во всяком случае так, как ожидаете. Фреймы перехватывают. Проверено. Наелся.
Все равно. Нам же максимум надо перехватывать Change() в классе, хотя и Exit() понадобится :) Но ведь непринципиально, что там кого перехватывает - поскольку по Exit будет передача фокуса следующему объекту в массиве, код-то всё равно отработает, даже если родитель перехватит управление.
А вот с Tag'ом - по Exit() надо будет заново перебирать все контролы, чтобы найти следующий...
Впрочем, действительно, надо экспериментировать.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
Не сможете. Во всяком случае так, как ожидаете. Фреймы перехватывают. Проверено. Наелся.
Все равно. Нам же максимум надо перехватывать Change() в классе, хотя и Exit() понадобится :) Но ведь непринципиально, что там кого перехватывает - поскольку по Exit будет передача фокуса следующему объекту в массиве, код-то всё равно отработает, даже если родитель перехватит управление.
А вот с Tag'ом - по Exit() надо будет заново перебирать все контролы, чтобы найти следующий...
Впрочем, действительно, надо экспериментировать.

Автор - AndreTM
Дата добавления - 06.10.2013 в 22:06
diJi00 Дата: Воскресенье, 06.10.2013, 23:27 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ikki, а
а aoTxtBxes(i).oTxtBx, видимо, имеет жестко заданный тип?


для совместного использования с выпадающим списком, что нужно дописать, или изменить? Пока это не надо, но вдруг пригодится

Завтра проверю как программа поведет себя во вреймах и вкладках


Сообщение отредактировал diJi00 - Воскресенье, 06.10.2013, 23:37
 
Ответить
Сообщениеikki, а
а aoTxtBxes(i).oTxtBx, видимо, имеет жестко заданный тип?


для совместного использования с выпадающим списком, что нужно дописать, или изменить? Пока это не надо, но вдруг пригодится

Завтра проверю как программа поведет себя во вреймах и вкладках

Автор - diJi00
Дата добавления - 06.10.2013 в 23:27
ikki Дата: Понедельник, 07.10.2013, 00:33 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
для совместного использования с выпадающим списком

заведете еще один модуль класса, аналогичный модулю clsmTxtBxes - для комбобоксов.
в процедуре Class_Activate модуля формы, кроме имеющихся проверок, нужно будет добавить проверку на тип контрола:
TypeName(ctl)
в зависимости от результата (текстбокс или комбобокс), надо будет добавлять ссылку на контрол в соответствующий массив с элементами соответствующего типа.

(честно говоря, не пробовал) :)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
для совместного использования с выпадающим списком

заведете еще один модуль класса, аналогичный модулю clsmTxtBxes - для комбобоксов.
в процедуре Class_Activate модуля формы, кроме имеющихся проверок, нужно будет добавить проверку на тип контрола:
TypeName(ctl)
в зависимости от результата (текстбокс или комбобокс), надо будет добавлять ссылку на контрол в соответствующий массив с элементами соответствующего типа.

(честно говоря, не пробовал) :)

Автор - ikki
Дата добавления - 07.10.2013 в 00:33
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!