![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 15
|
![]()
Помогите, пож-та, разобраться. Копаю уже который день и не могу понять. Я недавно начала заниматься VBA, поэтому простите, если вопрос очень легкий.
Имеется несколько связанных между собой пользовательских форм. Не могу постичь алгоритм, как это все работает. В общем, цепочка из 3 форм (описана ниже). При вводе данных в последнюю форму и нажатии кнопки "ОК", данные заносятся в обе таблицы, как и нужно, но появляется все та же 3-я форма, уже пустая. А мне нужно, чтобы все 3 формы закрывались. Когда же нажимаю "Отмена" для каждой формы поочередно, то появляется сообщение об ошибке автоматизации, закрываю его - опять появляется последняя форма. И еще вопрос. Когда форма заканчивает работу (Unload), в какое место возвращается программа? Вначале в отдельном модуле задаются глобальные переменные: заказчик, номер заказа, клиентский номер, фирма-клиент, улица, индекс, город. С помощью отдельной кнопки на листе запускается макрос: Sub NewOrder() 'Запускает пользовательскую форму Заказчик ufOrderer.Show End Sub Данная форма имеет 2 OptionButtons (2 заказчика) и 2 командные кнопки ОК и Отмена. Кнопка Отмена: Private Sub CanselButton_Click() Unload Me End Sub Кнопка ОК: Private Sub OKButton_Click() 'Если выбран клиент1, то присваиваем глобальной переменной его имя 'скрываем данную форму и запускаем следующую. If obMM Then Orderer = "Клиент1" Me.Hide ufOrderClient.Show Else ...... End If Unload Me End Sub Следующая форма предлагает ввести номер заказа и клиентский номер, проверяет, есть ли данный клиентский номер в соответсвующей таблице на отдельном листе. Имеются 2 текстовых поля и 2 командные кнопки. Кнопка "Отмена": Private Sub CancelBut_Click() 'При нажатии кнопки Отмена возвращаемся к первой форме Unload Me ufOrderer.Show End Sub Кнопка ОК: Private Sub OKBut_Click() ' Процесс для клиента 1 ........ (Здесь глобальным переменным присваиваются значения, введенные в форму) ....... 'Ищем, имеется ли введенный клиентский номер в таблице For i = 2 To EndCell If Cells(i, 1).Value = ClientNum Then ' Если номер найден MsgBox "Введенный номер имеется в таблице" ........ (Здесь глобальным переменным присваиваются значения из таблицы) Exit For Else ' Если номер не найден, открываем след.польз. форму Me.Hide ufNewClient.Show End If Next i Call EnterNewOrder ' Заполняет последнюю строку в листе заказов Unload Me End Sub Итак, если клиенский номер не найден, то открывается новая форма ufNewClient, где нужно ввести фирму, адрес и т.п. Кнопка "Отмена": Private Sub CancelNew_Click() Unload Me ufOrderClient.Show ' Возвращаемся к предыдущей форме End Sub Кнопка ОК: Private Sub OKNeu_Click() ........ (Здесь глобальным переменным присваиваются значения, введенные в форму) .............. (Данные заносятся в таблицу клиентов) .............. Call EnterNewOrder ' Данные заносятся в последнюю строку в листе заказов Unload Me End Sub Пожалуйста, помогите разобраться, в чем ошибка. Буду благодарна за ответы. Последний раз редактировалось LBlonde; 01.07.2011 в 21:47. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 15
|
![]()
Что, неужели никто не может ответить?
![]() Еще я обнаружила, что при наличии 3-й формы не работает цикл во второй форме, т.е. программа не находит клиентский номер в таблице и сразу открывает третью форму. Когда убираю команду показать 3-ю форму, то все работает правильно. В чем проблема? |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 16.05.2010
Сообщений: 1,249
|
![]()
Я не спец. А спецы могут молчать, т.к. нет файла с формами.
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 15
|
![]()
файл не на русском и не на английском. не знаю, имеет ли смысл его выставлять. поэтому переписала сюда код.
|
![]() |
![]() |
![]() |
#5 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Код VBA ведь на английском - а больше нам ничего и не надо. Цитата:
Сами подумайте - для спеца найти ошибку в вашем коде потребует около минуты времени, а чтобы её найти, надо нарисовать пример файла - это потребует в несколько раз больше времени. А спецы все ленивые - им неохота рисовать формы и вставлять туда код, лишь для того, чтобы проверить свою идею ) |
||
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 15
|
![]()
Спасибо за ответ. Немного подкорректирую файл и выставлю.
|
![]() |
![]() |
![]() |
#7 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
LBlonde, и вопросы как-то по пунктам разложите...
а-то лично я ниасилил Ваш пост - даже не дочитав до середины, начинаю забывать что я читал в начале, и так несколько раз подряд...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 24.06.2011
Сообщений: 15
|
![]()
Выставляю файл. Комментарии написала по-русски, хоть и латиницей, надеюсь, это хоть немного поможет разобраться. Попытаюсь еще раз объяснить все более кратко.
Проект запускается кнопкой, находящейся на листе Excel. 1. Нужно выбрать заказчика. 2. Если выбран заказчик MyM, то открывается след.форма, куда вносится номер заказа и клиентский номер. (Для остальных заказчиков процесс еще не разрабатывался). 3. Наличие введенного клиенского номера проверяется в таблице на отдельном листе. Если номер найден, то данные заносятся в таблицу заказов одной строкой. И на этом процесс завершен. 4. Если номер не найден, то открывается следующая форма, куда заносятся данные по клиенту. Затем эти данные должны быть занесены в таблицу с клиентскими номерами и в таблицу с заказами. Теперь мои вопросы: 1. Не могу выйти из последней формы. Нужно, чтобы после ее заполнения процесс завершался окончательно. Но форма снова выскакивает. 2. При наличии в программе 3-й формы не работает поиск клиентского номера. Программа пишет, что клиентский номер не найден (хотя он есть в таблице), и выводит 3-ю форму. Если же я убираю эту проклятую третью форму, то программа работает нормально и находит имеющийся номер. 3. В файле имеется еще одна пользовательская форма ufTyp, которую я хочу загружать тогда, когда выше указанные операции завершены, но только для того же заказчика MyM. Но я ума не приложу, куда ее вставлять. Поэтому вопрос: куда возвращается программа после завершения работы польтзовательских форм? т.е. в какое место программы мне вставить эту форму? Если будут возникать вопросы, готова на них ответить. Буду благодарна вам за отклики! Последний раз редактировалось LBlonde; 03.07.2011 в 14:25. |
![]() |
![]() |
![]() |
#9 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Кое-что исправил - проверяйте: http://excelvba.ru/XL_Files/Sample__...__17-33-46.zip
Немного оптимизировал код. Присвоил листам кодовые имена - что упростило код: ![]() Код:
Но общая суть должна быть понятна. Все формы сделал немодальными - чтобы одна другой не мешала. Убрал ненужные обработчики ошибок. Несколько раз макросы вылетали с ошибками на ровном месте - видимо, сказывается, что файл на другом языке |
![]() |
![]() |
![]() |
#10 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Вообще, как мне кажется, у вас не совсем верный подход к организации данных в книге.
Взять хотя бы то, что вводимые данные дублируются на обоих листах. По идее, данные лучше хранить на одном листе (к примеру, на Kundennummer), а на втором листе (Aufträge) выводить из формулами (занося в строку только Kunden-Nr. - все остальные данные подтягиваются из базы данных из строки с таким номером) Также считаю неправильным изготовление отдельных форм для каждого из заказчиков. Неужто заполняемые поля для разных заказчиков так сильно отличаются друг от друга? Вообще, какой смысл этой программы? Для чего все эти формы? Какова конечная цель? |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по формам | Igori_18 | Microsoft Office Access | 2 | 28.10.2013 08:47 |
Вопрос по формам | Tirpitz | HTML и CSS | 1 | 25.11.2010 22:47 |
Вопрос по формам | Armatus | Общие вопросы C/C++ | 11 | 18.05.2009 17:44 |
Вопрос по формам | max38934 | Общие вопросы Delphi | 4 | 18.05.2009 13:41 |
Вопрос по формам | UserOK | Общие вопросы Delphi | 6 | 13.05.2008 21:25 |