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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2011, 21:23   #1
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию TextBox_Change перехватывает вставку в другой TextBox

Доброго времени суток уважаемые форумчане, есть несколько вопросов
1)есть 1 listbox с двумя колонками и 2 texbox , в texbox хочу предусмотреть вставку из listbox и ввод данных вручную
Код:
Private Sub ListBox2_Click()
    ListBox2.TextColumn = 1
    TextBox9.Text = ListBox2.Text
    ListBox2.TextColumn = 2
    TextBox10.Text = ListBox2.Text
End Sub

Private Sub TextBox9_Change()
обработка значения
End Sub

Private Sub TextBox10_Change()
обработка значения
End Sub
значение второго TextBox не обновляется,насколько я понимаю TextBox9_Change перехватывает вставку значения в TextBox10 и начинает свою процедуру как с этим бороться?
2)заметил странную особенность 2 идентичных TextBox в оба ввожу целые числа, в одном значение определяется как число а в другом как срока (при проверке на isNumeric).как контролировать что бы только числовое значение хранилось в textbox ?
3)не много не по теме ... в одной userform использую 3 массива и их постоянно сортирую,перед этим их вновь создав.как сделать так что бы они формировались при инициализации userform ,а потом обращаться к ним не изменяя их?как переменные их через public не удается объявить.
Composter вне форума Ответить с цитированием
Старый 30.04.2011, 21:52   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

1) По текстбосам без примера непонятно - я думаю, не должно перехватывать. Может быть причина в "обработка значения"?
3) Я объявлял просто
Public a
а затем позже Redim a(1 to n, 1 to m)
вроде так было...
Но всё работало - массив жил всё время жизни книги.

Проверил:
в модуле:
Код:
Public a

Sub tt()
a(1, 2) = 1
End Sub
В книге:
Код:
Private Sub Workbook_Open()
ReDim a(1 To 3, 1 To 2)
End Sub
tt можно погонять в разных вариантах - массив жив.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.04.2011 в 21:56.
Hugo121 вне форума Ответить с цитированием
Старый 30.04.2011, 22:22   #3
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

в том то и дело что пробовал без обработки
Код:
Private Sub TextBox9_Change()
Dim de As Single
de = 5 / 0
end sub
и на момент прерывания TextBox10.text имеет тип string и значение "" . забыл сказать я хочу данные в этих textbox использовать для дальнейших вычислений на лету, и должна быть проверка TextBox9.text и TextBox10.text,а если она есть в TextBox9_Change то TextBox10.text будет выдавать "".может есть возможность что бы процедура ListBox2_Click не прерывалась ?
а на счет массива разве не нужно после redim поставить preserv ?
Composter вне форума Ответить с цитированием
Старый 30.04.2011, 22:43   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если preserve - то сохраняет прежние значения, а их ещё нет, да и не нужно сохранять.
Preserve пишут, когда хотят увеличить массив, не потеряв значения. Но т.к. в этом случае (preserve) массив переписывается заново, то я лично стараюсь обходиться без этого - потеря времени, если массив большой и циклов много, а так обычно и бывает.

Насчёт текстбоксов - нарисуйте пример, больше толку будет.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.04.2011 в 22:45.
Hugo121 вне форума Ответить с цитированием
Старый 30.04.2011, 23:57   #5
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

решил,вот перед отправкой почистить файл.вроде данные нормально переносится стали(возможно такое что бы процедуры из модуля перехватывали процессы из формы?),но вот 2 вопрос остался нерешенным,если вводить число в textbox9 то оно при дальнейших расчетах будет учитываться а если в textbox10 то она становится stirng и соответсвенно при подсчете в textbox11 учитывается только textbox9
Вложения
Тип файла: rar Подбор воздуховодов2.rar (28.6 Кб, 19 просмотров)
Composter вне форума Ответить с цитированием
Старый 01.05.2011, 00:17   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

У меня все считается правильно
Сделайте так
Код:
CDbl(TextBox9.Text)    CDbl(TextBox10.Text)
а если только целые,то можно
Код:
 Val(TextBox9.Text)
иначе точка должна быть вместо запятой разделителем
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 01.05.2011 в 00:20.
doober вне форума Ответить с цитированием
Старый 01.05.2011, 00:45   #7
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

doober, спасибо за совет.я уже заметил что с запятыми проблема,и поэтому значение se4enie загнал в переменную single чтобы корректно считалось.у меня значение в textbox11 считается, но выдает неверный результат, только если в textbox10 стоит 0 тогда верный.просто в TextBox1_Change и TextBox2_Change я принудительно меняю точки на зяпятые, но vba распознает их как числа,а не как строку.непонятен его избирательный принцип...
Composter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Про вставку картинок (опять) Jockernsk Microsoft Office Excel 14 27.10.2010 13:49
И опять про вставку картинок Even Microsoft Office Excel 8 27.10.2010 11:47
Как выполнить запрос на вставку в MySql? Mixasik SQL, базы данных 1 21.11.2009 22:18
[С++]Программа на вставку для асемблера sasha3050 Помощь студентам 0 29.09.2009 18:15
Пытаюсь написать прогу которая перехватывает нажатия клавиш клавиатуры и записует в текстовый файл, но evg_reg35 Общие вопросы Delphi 42 05.04.2008 13:44