Excel利用VBA批量選擇數據有效性下拉列表中的項目並列印

  有時我們會在Excel中利用數據有效性製作一個下拉列表,通過選擇下拉列表中的不同項目來的得到不同的表格內容,類似Word中的郵件合併。如下例為某公司員工信息表,該工作簿包含兩個工作表,一個工作表為「員薪水料」,其中包含所有人員的基本資料,另一個工作表為「列印員工信息表」,用VLOOKUP函數提取「員薪水料」工作表的內容,將某個員工的資料及電子照片集中到一頁來列印,如下圖。該工作表的B3單元格用「數據有效性(或數據驗證)→設置→序列」設置了數據有效性下拉列表,通過該下拉列表來選擇不同的員工。

Excel利用VBA批量選擇數據有效性下拉列表中的項目並列印

在當工作表中的員工數量較多時,手動逐一選擇姓名並列印顯得很繁瑣。遇到這種情況,不妨利用下面的宏代碼將員工信息表一次全部列印出來,十分方便。方法是:

按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”)」中指定的單元格需根據實際進行修改。