2016-06-06 2 views
0

Я начинаю использовать VBA в Excel. Я пытаюсь создать форму пользователя, которая выглядит как this. У меня есть все кодировки, но когда я запускаю его с помощью командной кнопки в Excel, ListBox не заполняется. Когда я пытаюсь ввести цифры и нажмите «отправить», я получаю «Ошибка времени выполнения» 424: «Требуется объект». Когда я нажимаю отладки, он берет меня к линииListBox не заполняется

Cells(emptyRow, 1).Value = dotwListBox.Value

Я не уверен, что происходит. Любая помощь будет оценена! Вот мой код:

Private Sub cancel_Click() 
 
Unload Me 
 
End Sub 
 

 
Private Sub clear_Click() 
 
Call UserForm1_Initialize 
 

 
End Sub 
 

 

 

 
Private Sub submit_Click() 
 
Dim emptyRow As Long 
 
'Make Sheet3 active 
 
Sheet3.Activate 
 
'Determine emptyRow 
 
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 
 
'Transfer information 
 
Cells(emptyRow, 1).Value = dotwListBox.Value 
 
Cells(emptyRow, 2).Value = t235tocbTextBox.Value 
 
Cells(emptyRow, 3).Value = t235codbTextBox.Value 
 
Cells(emptyRow, 4).Value = apiphbTextBox.Value 
 
Cells(emptyRow, 5).Value = apiturbiditybTextBox.Value 
 
Cells(emptyRow, 6).Value = apitocbTextBox.Value 
 
Cells(emptyRow, 7).Value = apicodbTextBox.Value 
 
Cells(emptyRow, 8).Value = apibodbTextBox.Value 
 
Cells(emptyRow, 9).Value = longbaydobTextBox.Value 
 
Cells(emptyRow, 10).Value = asudobTextBox.Value 
 
Cells(emptyRow, 11).Value = rasmlssbTextBox.Value 
 
Cells(emptyRow, 12).Value = clarifierturbiditybTextBox.Value 
 
Cells(emptyRow, 13).Value = clarifierphbTextBox.Value 
 
Cells(emptyRow, 14).Value = clarifiernh3bTextBox.Value 
 
Cells(emptyRow, 15).Value = clarifierno3bTextBox.Value 
 
Cells(emptyRow, 16).Value = clarifierenterococcibTextBox.Value 
 
Cells(emptyRow, 17).Value = clarifierphosphorusbTextBox.Value 
 

 

 

 

 
End Sub 
 

 
Private Sub UserForm1_Initialize() 
 
'Empty t235tocbTextBox 
 
t235tocb.Value = "" 
 
'Empty t235codTextBox 
 
t235codb.Value = "" 
 

 

 
'Fill dotwListBox 
 
With dotwListBox 
 
.AddItem "Monday" 
 
.AddItem "Tuesday" 
 
.AddItem "Wednesday" 
 
.AddItem "Thursday" 
 
.AddItem "Friday" 
 
End With 
 

 
'Empty apiphbTextBox 
 
aphiphb.Value = "1" 
 
'Empty apiturbiditybTextBox 
 
apiturbidityb.Value = "" 
 
'Empty apitocbTextBox 
 
apitocb.Value = "" 
 
'Empty apicodbTextBox 
 
apicodb.Value = "" 
 
'Empty apibodbTextBox 
 
apibodb.Value = "" 
 
'Empty longbaydobTextBox 
 
longbaydob.Value = "" 
 
'Empty asudobTextBox 
 
asudob.Value = "" 
 
'Empty rasmlssbTextBox 
 
rasmlssb.Value = "" 
 
'Empty clarifierturbiditybTextBox 
 
clarifierturbidityb.Value = "" 
 
'Empty clarifierphbTextBox 
 
clarifierphb.Value = "" 
 
'Empty clarifiernh3bTextBox 
 
clarifiernh3b.Value = "" 
 
'Empty clarifierno3bTextBox 
 
clarifierno3b.Value = "" 
 
'Empty clarifierenterococcibTextBox 
 
clarifierenterococcib.Value = "" 
 
'Empty clarifierphosphorusTextBox 
 
clarifierphosphorusb.Value = "" 
 
End Sub

+0

Является ли 'dotwListBox' пустым ListBox? Если это так, то неудивительно, почему это дает вам ошибку. 'Sub UserForm_Initialize' должен работать, если ListBox был назван правильно. Может быть, вы хотите проверить, действительно ли '(Name)' в окне свойств для ListBox установлено на 'dotwListBox'? Кроме того, могу ли я рекомендовать, чтобы вы начали кодирование явно, добавив лист и книгу в «Ячейки (emptyRow, 1) .Value'. Например, вот так: «С листом3», а затем «.Cells (emptyRow, 1) .Value'. – Ralph

+0

Имя, которое я использовал, не совпадает с именем в окне свойств, поэтому я исправил это. Он все еще не заполнял ListBox, поэтому я закончил использование функции RowSource и вытащил содержимое из группы ячеек на пустой лист. И спасибо за отзыв о кодировании явно на лист! Я новичок и все, что помогает прояснить мой код, потрясающе! – srs1011

ответ

0

Там могут быть две причины:

  1. Ваш ListBoxMultiSelect свойство установлено в 1 (fmMultiSelectMulti) или 2 (fmMultiSelectExtented)

    В этом случае его имущество Value будет всегда Null

  2. Ваш ListBox не имеет выбранный элемент

    даже если его свойство MultiSelect устанавливается равным 0 (fmMultiSelectSingle) его свойство Value возвратит нуль, если ни один элемент не выбран

    В этом случае установите чек с его ListIndex свойство, как следует

If dotwListBox.ListIndex <> -1 Then Cells(emptyRow, 1).Value = dotwListBox.Value

Поскольку -1 - это значение, возвращаемое ListIndex, когда ни один товар не выбран

+0

@ srs1011: вы прошли через это? – user3598756

+0

Да в раунде вроде как. Во-первых, я исправил имя ListBox, так как заметил, что я имею в виду неправильное имя. Затем мне пришлось заполнить ListBox с помощью функции RowSource, потому что я не мог заставить его заполнять иначе, когда я нажимаю кнопку команды на своем листе, чтобы запустить форму. После этого все сработало! Спасибо огромное! – srs1011

+0

, если имя ListBox не было правильным, вы встретите ошибку прямо в подмножестве 'UserForm1_Initialize', который запускается до' submit_Click'. Хотя в вашем вопросе вы сказали, что ошибка была достигнута в этом последнем. Более того, даже если вы успешно заполняете свой «ListBox», но затем попробуйте «Ячейки (emptyRow, 1) .Value = dotwListBox.Value', не получив при этом пользователя (или кода) значение, вы все равно получите ошибку.Поэтому, если вы еще не установили 'If dotwListBox.ListIndex <> -1 Then' check, я думаю, вы должны это сделать. Было бы хорошо, если вы сообщите мне об этих двух проблемах. спасибо – user3598756

Смежные вопросы