我需要改善代码的帮助,或者如果我的代码已经相当不错,我会对实现它的其他方式感兴趣。
我要做什么: 在Excel中,我有一个用户窗体,用户可以在其中输入人们的姓名,年龄,头发颜色等(一次输入一个人)。对于类似头发的颜色,我在列表框中提供了5个预定义的选择,并且由于人们可以更改头发的颜色,因此启用了多选。然后将选定的头发颜色(一种或多种)粘贴到特定单元格。
问题: 当用户忘记选择头发颜色时,我在错误处理方面有些挣扎。
工作代码:我确实将其与以下代码一起使用
Private Sub cmdSubmit_Click()
Dim cnt As Long
Dim LastRow As Long
Dim s As String
Dim i As Integer
With Me.lbxHair
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
s = s & .List(i) & ","
cnt = cnt + 1
End If
Next i
End With
If cnt = 0 Then
MsgBox "No hair color selected"
Exit Sub
Else
Cells(LastRow + 1, 1).Value = Me.tbxName.Value
Me.tbxName.Value = ""
Me.tbxName.SetFocus
Range("B" & LastRow + 1).Value = Left(s, Len(s) - 1)
On Error Resume Next
End If
End Sub
这对我来说完全可以,但是有没有辅助cnt-Variable的方法吗?我尝试了此操作,因为我读过.ListIndex = -1
表示什么都没选择
无效代码(与上面的变量声明相同):
With Me.lbxHair
If .ListIndex = -1 Then
MsgBox "No hair color selected"
Exit Sub
Else
For i = 0 To .ListCount - 1
If .Selected(i) = True Then s = s & .List(i) & ","
Next i
End If
End With
Cells(LastRow + 1, 1).Value = Me.tbxName.Value
Me.tbxName.Value = ""
Me.tbxName.SetFocus
Range("B" & LastRow + 1).Value = Left(s, Len(s) - 1)
On Error Resume Next
当尝试不选择任何内容时,出现“运行时错误'5':无效的过程调用或参数”
为什么?另外,您还有其他建议如何解决这个问题或如何改进代码吗?
答案 0 :(得分:0)
您可以尝试以下操作:
Private Sub cmdSubmit_Click()
Dim LastRow As Long
Dim s As String, sep As String
Dim i As Integer
With Me.lbxHair
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
s = s & sep & .List(i)
sep = ","
End If
Next i
End With
If Len(s) = 0 Then
MsgBox "No hair color selected"
Exit Sub
Else
Cells(LastRow + 1, 1).Value = Me.tbxName.Value
Cells(LastRow + 1, 2).Value = s
Me.tbxName.Value = ""
Me.tbxName.SetFocus
End If
End Sub