如果选择了特定值,则从列表框集合中添加新工作表

时间:2018-11-24 01:07:34

标签: excel vba excel-vba listbox userform

某些背景:有2个工作表,一个工作表包含员工姓名/信息列表,一个工作表包含交货记录(每个交货是由另一名员工在另一张工作表上完成的)

我已经创建了一个列表框,其中员工姓名不在第一张纸上。根据列表框中的选择,我想为所选员工插入一个新的工作表,其中列出了他们所做的所有交付(不在交付表中)。列表框中还有一个“所有员工”选项,应为每个员工插入一张工作表。

1 个答案:

答案 0 :(得分:0)

最好将“所有员工”选项作为复选框而不是列表框中的值-但这只是个人喜好。如果您决定采用这种方法,则可以使用CheckBox_Click事件来完全禁用列表框(如果已选中)。

无论如何,请问您的实际问题。您可以先使用以下代码行检查列表框的值是否为All Employees

If Me.ListBox1.Value = "All Employees" Then

一旦您确认上述内容是正确的,则可以使用.ListCount获取列表框中项目的总数,并遍历每个列表项目:

For i = 0 To .ListCount - 1

对于循环中的每个项目,请确保您没有添加名为All Employees的工作表:

If .List(i) <> "All Employees" Then

最终测试通过后,创建一个新的工作表并将其命名为列表框的值:

Private Sub CommandButton1_Click()

    With Me.ListBox1
        If .Value = "All Employees" Then
            Dim i As Long
            For i = 0 To .ListCount - 1
                If .List(i) <> "All Employees" Then
                    ThisWorkbook.Worksheets.Add.Name = .List(i)
                End If
            Next
        End If
    End With

End Sub

我认为应该在按下命令按钮时对此进行检查-因此我已将其添加到该特定事件中。


其他注释

  • 由于您没有提及列表框的名称,因此我在代码中使用了通用名称ListBox1。如果不同,则必须将其更改为实际列表框的名称。
  • 如果您用来填充工作表的按钮名称不同,您可能还需要在上述代码中更新CommandButton1的名称。