【问题标题】:Requiring Listbox Selection for userform需要用户表单的列表框选择
【发布时间】:2018-04-17 04:13:20
【问题描述】:
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 中选择一个选项并提交信息时,会弹出“运行时错误”窗口。我想通过出现一个消息框来阻止这种情况的发生,告诉用户做出选择--->在消息框上单击确定--->然后继续。如果用户没有选择一个选项,那么每次都应该执行相同的过程。如果您有任何想法,我很想尝试一下。谢谢。

【问题讨论】:

  • 如果在没有选择的情况下您可以继续进行而不会出错,您可以在您的宏中做出/使用该选择之前添加On Error Resume Next。然后,使用On Error Goto 0 重置错误处理
  • 感谢您的帮助,我花了一些时间尝试采纳您的建议,但仍然无法使其正常工作。On Error Resume Next 部分会打开一个无法关闭的消息框。

标签: excel vba listbox userform


【解决方案1】:

如果没有选择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,但您需要相应的列表框事件来启用/禁用按钮。以下是一个示例,未经测试。

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

另一种方法是在您进入CommandButton1_Click 例程并在那里处理时检查是否已选择某些内容。但我更喜欢从一开始就防止错误的用户输入 - 不太复杂。

【讨论】:

  • 这一款效果很好;你的建议是对的。谢谢AJD
  • 我想对每个文本框 (1,2,4,5,6) 执行相同的操作,并要求在启用 CommandButton1 之前填写它们。我尝试了以下方法: Private Sub TextBox1_Change() CommandButton1.Enabled = Len(TextBox1.Text) >= 3 End Sub 我没有运气。
  • @sway:发布一个新问题。一种类似的技术,但答案稍微复杂一些,因为涉及多个 TextBox。并且通过多个控件使用稍微复杂的技术。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多