要求用户窗体的列表框选择

Requiring Listbox Selection for 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

大家好,我正在使用上面的代码,它非常适合我的用户表单。我遇到的唯一问题是,当有人没有从 listbox1 中选择一个选项并提交信息时,"Runtime Error" window 会弹出。我想通过显示一个消息框来阻止这种情况的发生,告诉用户做出选择--->单击消息框上的确定--->然后继续。如果用户没有 select 一个选项,每次都应该执行相同的过程。如果您有任何想法,我很乐意尝试一下。谢谢

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

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,但您需要一个相应的列表框事件来 enable/disable 按钮。以下是示例,未经测试。

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

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