我有一个功能齐全的用户窗体,在点击“提交”按钮时会将值传输到工作表。当数据验证应用于所有文本框时出现此问题(出现一个消息框要求输入值),并且列表框中没有数据验证。
但是,由于添加了列表框的数据验证(请参阅下面的代码),“提交”按钮仅传输表单构建器中的预选值,而不是选择。例如。如果默认情况下没有选择任何内容,那么我进行选择,它会传输一个空单元格。如果默认情况下选择“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
答案 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)