#excel #vba #listbox
#excel #vba #список
Вопрос:
У меня есть пользовательская форма Excel, которая отправляет данные на рабочий лист. Я встроил проверку данных, которая требует, чтобы в каждом текстовом поле было введено значение, например:
Private Sub Button_Submit_Click()
'Data Validation
If Me.txtCVS.Value = "" Then
Me.txtCVS.SetFocus
MsgBox "'CVs Screened' is a mandatory field. Enter daily figure or zero.", vbOKOnly, "Required Field"
Exit Function
Однако я не знаю, какой код использовать, чтобы требовать выбора из списка — пользователи выбирают свое имя из списка, прежде чем вводить свои ежедневные цифры. Некоторые пользователи, похоже, не могут вспомнить, чтобы щелкнуть их имя (!!!).
У кого-нибудь есть фрагмент работоспособного кода, который я могу использовать, чтобы потребовать выбора перед отправкой результатов? Похоже, он не работает так же, как текст в текстовом поле выше.
Ответ №1:
Вы можете использовать приведенную ниже функцию, которая перебирает все элементы в списке и возвращает true / false, если что-то выбрано или нет.
Private Sub Button_Submit_Click()
If Not IsAnythingSelected(ListBox1) Then
MsgBox "Please select your name"
End If
End Sub
Function IsAnythingSelected(lBox As Control) As Boolean
Dim i As Long
Dim selected As Boolean
selected = False
For i = 1 To lBox.ListCount
If lBox.selected(i) Then
selected = True
Exit For
End If
Next i
IsAnythingSelected = selected
End Function
Комментарии:
1. Кажется, у меня возникли небольшие проблемы с этим. Я скопировал приведенный выше код, чтобы он располагался под моей подпрограммой Button_Submit_Click() и над моей проверкой данных текстового поля (выше). Однако я получаю ошибку компиляции, потому что проверка текстового поля выполняется после функции End, но в конце подраздела. Я думаю, что моя проблема заключается в том, что функция и вспомогательный элемент смешаны вместе. Есть ли какой-либо способ объединить как вышеуказанную функцию цикла, так и проверку текстового поля в моем исходном сообщении?
2. @cazzzac нет, просто добавьте
If Not
end if
часть til в ваш текущий Button_Submit_Click() и добавьте всюFunction
часть под любыми подразделами3. Спасибо!!! Это было вполне логично, но в моем мертвом состоянии я не мог с этим разобраться. Работает прекрасно.
4. Хммм, итак, проверка данных работает нормально, а остальная часть формы отправляется в набор данных без проблем. Но форма не будет передавать значение, выбранное из списка name. Он переносит все, что было предварительно выбрано в проекте VBA. Например, если предварительно выбранное значение было пустым, и я выбираю имя, передается пустое значение; если предварительно выбранное значение равно ‘Alex’, и я выбираю ‘Hannah’, будет передано ‘Alex’.
5. Возможно ли, что приведенная выше проверка данных, возможно, очистила мой выбор до предварительно выбранного значения?
Ответ №2:
Попробуйте изменить
For i = 1 to lBox.ListCount
для следующего:
For i = 0 To lBox.ListCount - 1