Страницы: 1
RSS
импорт данных в userform и попадание в событие change
 
Доброе утро! У меня очередные сложности с зависимыми формами.  
Расскажу по порядку для тех, кто не был участником предыдущих обсуждений.  
 
Есть несколько зависимых юзерформ: основные и вспомогательная.  
При нажатии на контрол основной_формы_1 отображается вспомогательная форма, пользователь заполняет ее поля, если все правильно (заполняемые поля на событии change приравниваются к ячейкам листа, по нажатию на ОК на форме значения ячеек проверяются) - форма закрывается.  
Помимо возможности заполнять все вручную есть возможность импорта данных из стороннего файла excel. При этом перенос данных идет и в основную_форму_1, и в дополнительную.  
 
Сложности наступили при создании основной_формы_2. Из нее также есть возможность вызова вспомогательной формы, ручного ввода данных и импорта.  
Суть проблемы в следующем: при импорте данных, вызванном из основной_формы_2 и переносе значений во вспомогательную форму проверка на корректное заполнение не проходит: все правильно отображается, но значения ячеек на событие change нулевые.  
Таким образом перед глазами форма, где все везде заполнено, но проверка выдает "поле такое-то не заполнено" и пока руками не вобьешь те же значения, форма не закрывается.  
Такой беды при идентичной процедуре импорта из основной_формы_1 нет - все переносится, автоматом попадает в ячейки листа и проходит проверку.  
 
Подскажите мне, знающие посетители, как справиться с этой проблемой?
 
{quote}{login=The_Prist}{date=15.09.2011 12:14}{thema=}{post}Проверить - все ли ссылки в коде для контролов формы_2 ведут именно на контролы формы_2. А то может импортируете вроде как в форму_2, а на самом деле в 1. Или проверка после импорта идет по контролам другой формы.{/post}{/quote}  
 
Проверка идет не по контролам, а по ячейкам листа excel: импортируемые данные попадают в контролы вспомогательной формы, каждый контрол вспомогательной формы передает свое значение определенной ячейке листа:  
Private Sub TextBox1_Change()  
If SRisk_boy.TextBox1 <> "" Then Sheets("Данные").Range("J335") = CDbl(SRisk_boy.TextBox1)  
If SRisk_boy.TextBox1 = "" Then Sheets("Данные").Range("J335") = 0  
End Sub  
Вот только почему-то не передается это значение..
 
Знаете, что странно: если запускать доп. форму из основной_формы_2 на фоне листа excel и вводить руками, видно, что на change все значения on-line попадают на лист excel. А после импорте на фоне того же листа excel видишь заполненную доп. форму, но все вводы руками on-line не отображаются, а попадают на лист excel только после нажатия на OK. Хотя на ОК из присваиваний - только изменение значений основных форм.
 
В общем, сама решила задачу черезж..ным методом: вставила во вспомогательную форму условие на ОК: если запуск произошел НЕ из основной_формы_1 - выполняем все процедуры по приравниванию, которые висят на change контролов, потом запускаем проверку. И все заработало.
Страницы: 1
Читают тему
Наверх