添加数据验证后无法传输列表框值

时间:2014-07-03 06:25:23

标签: excel vba validation listbox

我有一个功能齐全的用户窗体,在点击“提交”按钮时会将值传输到工作表。当数据验证应用于所有文本框时出现此问题(出现一个消息框要求输入值),并且列表框中没有数据验证。

但是,由于添加了列表框的数据验证(请参阅下面的代码),“提交”按钮仅传输表单构建器中的预选值,而不是选择。例如。如果默认情况下没有选择任何内容,那么我进行选择,它会传输一个空单元格。如果默认情况下选择“Alex”,并且在表单打开后选择“Hannah”,则会传输“Alex”。

有没有人知道为什么列表框中的选定项目没有被选中?所有其他值传输正常(我有大约10个其他文本框没有问题)。这是数据验证的问题吗?

我的代码如下所示:

Private Sub cbSubmit_Click()

'Name Selection Data Validation
    If Not IsAnythingSelected(lbName) Then
    MsgBox "Please select your name"
    Exit Sub
    End If
Unload Me

'Begin Transfer Information and Change Workbook
Dim nwb As Workbook
Set nwb = Workbooks.Open("G:\Test Dataset.xlsx")

'Determine emptyRow
Dim emptyRow As Long
emptyRow = WorksheetFunction.CountA(nwb.Sheets("daily_tracking_dataset").Range("A:A")) + 1

'Transfer Information
With nwb.Sheets("daily_tracking_dataset")
'Date
.Cells(emptyRow, 1).Value = CDate(txtDate.Text)
'Name
.Cells(emptyRow, 2).Value = lbName.Value
'Reference Checkss
.Cells(emptyRow, 3).Value = txtROT.Value
.Cells(emptyRow, 4).Value = txtROP.Value

   End With

ActiveWorkbook.Save
ActiveWindow.Close
UserForm1.Hide
ActiveWindow.Close
End Sub

使用以下功能确定列表框中是否有项目被选中:

'Function to loop through Name list box and find a selection
Function IsAnythingSelected(lbName As Control) As Boolean
Dim i As Long
Dim selected As Boolean
selected = False
For i = 1 To lbName.ListCount
    If lbName.selected(i) Then
        selected = True
        Exit For
    End If
Next i
IsAnythingSelected = selected
End Function
  End If

1 个答案:

答案 0 :(得分:0)

ListBox索引从0开始而不是1.所以在你的函数中使用它:

For i = 0 To lbName.ListCount - 1
    If lbName.selected(i) Then
        selected = True
        Exit For
    End If
Next I

<强> EDIT1:
尝试替换此行:

.Cells(emptyRow, 2).Value = lbName.Value

用这个:

.Cells(emptyRow, 2).Value = lbName.List(lbname.ListIndex)