VBA批量选择数据有效性下拉列表中的项目并打印

2025-12-22 15:25 来源:好会计 阅读量:249

导读:有时我们会在Excel中利用数据有效性制作一个下拉列表,通过选择下拉列表中的不同项目来的得到不同的表格内容,类似Word中的邮件合并。如下例为某公司员工信息表,该工作簿包含两个工作表,一个工作表为员工资料,其中包含所有人员的基本资料,另一个工作表为打印员工信息表,用VLOOKUP函数提取员工资料工作表的内容,将某个员工的资料及电子照片集中到一页来打印,如

有时我们会在Excel中利用数据有效性制作一个下拉列表,通过选择下拉列表中的不同项目来的得到不同的表格内容,类似Word中的邮件合并。如下例为某公司员工信息表,该工作簿包含两个工作表,一个工作表为“员工资料”,其中包含所有人员的基本资料,另一个工作表为“打印员工信息表”,用VLOOKUP函数提取“员工资料”工作表的内容,将某个员工的资料及电子照片集中到一页来打印,如下图。该工作表的B3单元格用“数据有效性(或数据验证)→设置→序列”设置了数据有效性下拉列表,通过该下拉列表来选择不同的员工。



在当工作表中的员工数量较多时,手动逐一选择姓名并打印显得很繁琐。遇到这种情况,不妨利用下面的宏代码将员工信息表一次全部打印出来,十分方便。方法是:
按Alt+F11,打开VBA编辑器,单击菜单“插入→模块”,在代码窗口中粘贴下列代码:
Sub 批量提取数据有效性下拉列表项目并打印()
Dim rCell As Range
Dim Arr, m
On Error Resume Next
Set rCell = Worksheets("打印员工信息表").Range("B3")
'将单元格中的数据有效性序列提取到数组
With rCell.Validation
If .Type = 3 Then
If Range(.Formula1) Is Nothing Then
'当数据有效性序列的来源不是单元格区域时
Arr = Split(.Formula1, ",")
Else
Arr = Range(.Formula1).Value
End If
'批量打印
If IsArray(Arr) Then
For Each m In Arr
If m "" Then
rCell.Value = m
Worksheets("打印员工信息表").PrintOut
End If
Next
Else
rCell.Value = Arr
Worksheets("打印员工信息表").PrintOut
End If
End If
End With
End Sub
运行后即可将每个员工的资料页依次打印出来。
说明:
1.上述代码会检测B3单元格中数据有效性“序列”的列表源,将其中的每个项目依次赋值给B3单元格并打印工作表。
2.“Worksheets("打印员工信息表")”中指定的工作表名称和“Range("B3")”中指定的单元格需根据实际进行修改。

您正在与金牌答疑老师聊天