Страницы: 1 2 След.
RSS
Добавление данных в форму
 
Ошибка в пользовательской форме из книги:  
"Эффективная работа в Office Excel 2003", из-во Питер.  
Код скачал с сайта издательства.  
При нажатии на кнопку Add (добавление данных)    
выскакивает ошибка, программа останавливается на строке    
State.Text = Cells(r,4), т.к. элемент ComboBox (State) не  
может быть установлен на пустую строку.  
GetData()- копирование данных с листа в форму  
PutData()- копирование данных с формы на рабочий лист  
r - численное значение TextBox (RowNumber)  
 
Помогите, пожалуйста, исправить ошибку, у меня не получается!
 
Добрый день, Владимир.  
Посмотрите приложенный файл. В коде я подправил процедуру Private Sub CommandButton7_Click()
 
Somebody в вашем варианте  
При открытии формы и кликанье на Add на рабочий    
лист будет добавлена полностью первая строка.  
А надо, чтобы RowNumber было 25 , а все поля  
пустые для ввода новых данных, кроме ComboBox (State),  
т.к. там выбор из списка.
 
т.е. открываем форму, нажимаем кнопку Add и форма обнуляется и RowNumber становится равным 25? и всё? Т.е. кнопка Add - это просто удаление текстов из TexBox'ов?
 
{quote}{login=Kuzmich}{date=06.12.2009 08:49}{thema=Re}{post}А надо, чтобы RowNumber было 25 , а все поля пустые для ввода новых данных, кроме ComboBox (State), т.к. там выбор из списка.{/post}{/quote}  
Правильно ли я понимаю, что 25 - это первая свободная строка, и Вам необходимо её найти и в неё вставить данные? В этом проблема?
 
В модуле форму уже есть функция FindLastRow, которая находит последнюю пустую строку
 
Да, я вижу, но тогда почему 25?
 
25- первая свободная строка , определяется в    
программе    
Я пробовал делать так  
Private Sub CommandButton7_Click()      'кнопка Add  
Cells(LastRow, 4) = "AK"  
Cells(LastRow, 6) = Now  
RowNumber.Text = FormatNumber(LastRow, 0)  
End Sub  
 
Нажимаю Add, заполняю форму, нажимаю Save    
и получаю сообщение Illegal row number  
т.е. не происходит сохранение данных из формы на лист.
 
Не знаю) Я просто не понимаю, как по мнению Владимира должна работать кнопка Add.  
По-моему мнению она должна работать так  
1. Заполняешь все поля формы  
2. нажимаешь кнопку Add  
3. информация с формы переносится на лист Excel в последнюю строку (т.е. добавляется ниже в таблицу)  
 
А как хочет Владимир я ещё не понял )
 
(LastRow, 0) такого не может быть - нет нулевого столбца на листе. Самый младший - первый.
 
{quote}{login=Somebody}{date=06.12.2009 09:49}{thema=}{post}  
информация с формы переносится на лист Excel в последнюю строку (т.е. добавляется ниже в таблицу) {/post}{/quote}  
И я так понимаю задачу.
 
Владимир, по логике кнопка Add - это добавление новой строки в таблицу, а не изменение имеющихся данных в таблице. Поэтому нужно делать в 2 этапа: 1) заполняете форму своими данными; 2) нажимаете кнопку Add и данные из формы добавляются в низ таблицы на листе. А не наоборот.  
 
А кнопка Save - это чтобы изменить уже существующую информацию в таблице (например, поменялся индекс у клиента)  
 
Юр, RowNumber.Text = FormatNumber(LastRow, 0) - это правильно, просто TextBox'у в ФОРМЕ присваивается числовое значение строки. Это не адрес ячейки Cells(1,1)
 
На рабочем листе первая свободная строка - 25.  
Я так понимаю, что при нажатии на Add в  
TextBox (RowNumber) должна появится эта цифра.  
Но при добавлении выскакивает ошибка, см. первый пост.  
Остальные функции работают:  
поиск первой строки - First  
поиск последней строки - Last,  
а также Previous и Next
 
Владимир, давайте попробуем так. Вы говорите свою последовательность действий по пунктам 1)... 2)... 3)... и что в конце хотите получить, а мы подумаем как это решить. А то у нас сейчас получается так "я вот чего-то хочу от формы. А мы не можем понять чего вы хотите от неё"
 
Владимир, при нажатии кнопки Add происходит изменение значения поля RowNumber в форме, а при любом изменении этого поля запускается процедура GetData, которая обновляет данные в форме и смотрите, что происходит. В поле RowNumber появляется число 25 - это номер пустой строки под таблицей. Ещё раз подчеркну - она пустая. Потом идёт срабатывание процедуры GetData и начинается обновление формы из пустой строки и тут происходит ошибка, т.к. строка пустая. Это моё видение ситуации.  
 
Поэтому я немного переделал код на кнопку Add, она сразу добавляет данные из формы в таблицу, а затем только меняет число в поле RowNumber и только потом идёт обновление данных в процедуре GetData - т.к. строка 25 уже заполнена какой-то информацией
 
Ребята, я эту форму скачал с сайта издательства,  
но не могу разобраться, как происходит добавление    
данных в форму и запись этих новых данных на рабочий  
лист.  
Спасибо за участие.
 
Somebody, может задумка была такая: Add "добавляет" пустую строку, но номер у неё есть. Боксы очищаются, а после внесения в них неких данных, Save - сохраняет их на лист.
 
Юрий М  
Я тоже так думаю, но при выполнении  
выскакивают ошибки
 
Юр, а "Add "добавляет" пустую строку, но номер у неё есть" - это как? Куда добавляет пустую строку? в середину таблицы? и я не очень понимаю фразу "но номер у неё есть" - это как? )
 
Не - я специально кавычки поставил :-) Скажем так, бронирует её.  
Kuzmich, найдите в Private Sub PutData в коде такую строку:  
If r > 1 And r < LastRow Then  
и немного измените. Вот так:  
If r > 1 And r <= LastRow Then
 
Юрий М  
Я уже так делал, но это решает только  
проблему редактирования данных в любой  
из строк, но не добавление новых данных
 
Ну почему? Вот файл, в котором я сделал только эту корректуру.
 
Юрий М  
В вашем примере, в форме меняю RowNumber на 25  
и тут же вылетает ошибка
 
А где Вы его меняете? В TextBox? Ведь это вычисляемое значение. Зачем его менять?
 
При нажатии на Add значение RowNumber показывает  
последнюю пустую строку.  
Набрал новые данные, нажал Save, они сохранились.  
Жму опять Add, чтобы добавить следующие данные,  
но не тут-то было. Надо закрыть форму и открыть ее    
вновь, чтобы ввести следующие данные.  
Но это же неудобно. Или я что-то не так понимаю?
 
Юрий М  
Закомментировав эту строку  
'State.Text = Cells(r, 4)  
вы лишились возможности перебора строк  
по клавишам First, Next и т.д.  
Поле State не меняется
 
{quote}{login=Kuzmich}{date=07.12.2009 01:14}{thema=Re}{post}Юрий М закомментировав эту строку 'State.Text = Cells(r, 4) вы лишились возможности перебора строк по клавишам First, Next и т.д. Поле State не меняется{/post}{/quote}  
1. Странно - перебор строк по кнопкам First, Prev, Next, Last у меня производится.  
2. Поле State действительно в таком случае не меняется. Немного изменил код.
 
Юрий М  Вариант приемлемый, чуть изменил код, чтобы  
по умолчанию штат был АК, а дата сегодняшняя    
 
 If Cells(r, 4) <> "" Then      'Ю.М. - добавил  
     State.Value = Cells(r, 4)  'Ю.М. - добавил  
  Else                          'Ю.М. - добавил  
     State.Value = "AK"         'Ю.М. - добавил  
  End If                        'Ю.М. - добавил  
  Zip.Text = Cells(r, 5)  
     
  If Cells(r, 6) <> "" Then     'Kuzmuch - добавил  
  DateAdded.Text = FormatDateTime(Cells(r, 6), vbShortDate)  
  Else                            
     DateAdded.Text = FormatDateTime(Now, vbShortDate)    
  End If                          
  DisableSave  
 
Остается вопрос по добавлению данных без закрытия и    
открытия повторного формы
 
Попробуйте добавить строку:  
Private Sub CommandButton5_Click()  
PutData  
Call UserForm_Initialize 'Эту строку  
End Sub
 
Вот теперь вроде все нормально!  
Благодарю за участие и отзывчивость.  
Теперь на основе этой формы можно  
создавать свои. Это тем, кто еще только  
учится. Большое спасибо, Юрий М и Somebody!
Страницы: 1 2 След.
Наверх