如何通过VBA在Excel的下拉菜单中打印所有选项

时间:2017-10-04 19:28:37

标签: vba excel-vba excel

我在Excel中有一个员工记分卡,基本上看起来像这样: enter image description here

因此,Cell B2是一个读取员工的下拉列表(数据验证单元)。来自另一个选项卡的名称(选项卡2,列A1:A1000),因此在人们选择不同的名称后,这些核心指标将刷新(生成这些指标的数据已经链接到数据源)。

enter image description here

主管将打印此记分卡并与其员工交谈。

然而,有超过数百名员工,所以我想知道是否有任何简单的方法通过VBA可以打印每个员工的下拉列表中的所有选项。我在谷歌进行了一些搜索,找不到任何有效的工作为了我。

非常感谢

2 个答案:

答案 0 :(得分:2)

这是迭代数据验证单元格的代码。根据需要更改工作表名称和单元格引用。 您必须在for / each / next循环中添加打印代码

Sub Iterate_Through_data_Validation()
Dim dvCell As Range
Dim inputRange As Range
Dim c As Range


'Which cell has data validation
   Set dvCell = Worksheets("Sheet1").Range("B1")
'Determine where validation comes from
   Set inputRange = Evaluate(dvCell.Validation.Formula1)

For Each c In inputRange
    dvCell = c.Value
    'add some print page code here
Next c

End Sub

答案 1 :(得分:1)

如果你想遍历组合框列表:

我把它扔给你了。我没有时间去测试,但应该有效。您需要将“ComboBox1”替换为您的控件名称。您还需要将el.Name = "EmployeeList"更改为正确的工作表名称。

Sub printEmployees()
    On Error GoTo catch
    Err.Clear
    GoTo try

try:
    Dim el, sc As Worksheet


    Set sc = ActiveSheet
    Set el = Sheets.Add
    el.Name = "EmployeeList"

    sc.Activate

    i = 0
    For Each lItem In Me.ComboBox1.List
        el.Cells(1, i) = Me.ComboBox1.List(i)
    i = i + 1
    Next

    el.PrintOut

finally:
    On Error Resume Next

    Application.DisplayAlerts = False
    el.Delete
    Application.DisplayAlerts = True
    Set sc = Nothing
    Set el = Nothing
    Exit Sub

catch:

    MsgBox Err.Description
    Resume finally

End Sub