要求用户表单的列表框选择

时间:2018-04-16 19:38:06

标签: excel vba listbox userform

Private Sub CommandButton1_Click()
whichSheet = ListBox1.Value
Dim n As Integer
Do
n = n + 1
ListBox1.AddItem Sheets(n).Name
Loop Until n = Worksheets.Count

Worksheets(whichSheet).Activate
Dim lastrow
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

lastrow = lastrow + 1
Cells(lastrow, 1) = TextBox1
answer = MsgBox("Are you sure you want to add the record?", vbYesNo + vbQuestion, "Add Record")
If answer = vbYes Then
Cells(lastrow, 1) = TextBox1.Text
Cells(lastrow, 2) = TextBox2.Text
Cells(lastrow, 3) = TextBox3.Value
Cells(lastrow, 4) = TextBox4.Text
Cells(lastrow, 5) = TextBox5.Text
Cells(lastrow, 6) = TextBox6.Text
Else
    Cells(lastrow, 1) = ""
    Exit Sub
End If

End Sub


Private Sub UserForm_Initialize()
Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ListBox1.AddItem (ws.Name)
    Next ws
End Sub

大家好,我正在使用上面的代码,它完全适用于我的userform。我遇到的唯一问题是,当某人没有从列表框1中选择并提交信息时,"运行时错误"窗口弹出。我想通过制作一个消息框告诉用户做出选择来阻止这种情况发生--->点击消息框上的确定--->然后恢复。如果用户没有选择选项,则每次都应该执行相同的过程。如果您有任何想法,我很乐意尝试一下。感谢。

1 个答案:

答案 0 :(得分:0)

我处理这种情况的首选方法是,如果CommandButton1中没有选择任何内容,则禁用ListBox1。或者,换句话说,在选择某些内容时启用该按钮。

Private Sub UserForm_Initialize()
Dim ws As Worksheet
    CommandButton1.Enabled = False  ' <--- here.
    For Each ws In ThisWorkbook.Worksheets
        ListBox1.AddItem (ws.Name)
    Next ws
End Sub 

我目前没有打开Excel,但您需要相应的列表框事件来启用/禁用该按钮。以下是一个未经测试的示例。

Private Sub ListBox1_Change()
    CommandButton1.Enabled = ListBox1.ListIndex <> -1
End Sub

另一种方法是在输入CommandButton1_Click例程并在那里处理时检查是否已选择某些内容。但我更倾向于首先防止用户输入错误 - 不那么复杂。