前景提要(文末提供源碼下載)
word的郵件合并功能,相信大家都非常的熟悉了,一些固定模闆的批量打印功能都會用到這樣的操作,但是很多時候我們的數據是Excel中的,那麼我們是否能夠在Excel中實現類似于word中這種郵件合并的功能呢?
代碼區
其實這樣的話,就有點類似于我們之前學過的Excel的數據彙總的逆推,數據的拆分了,按照計劃,我們很快就會接觸到更多類型的數據的拆分了,我們這裡就先熱個場,提前接觸下數據的拆分,之所以在這裡說數據拆分,主要還是因為他的操作也類似于在多個工作表中同時進行數據填充,和我們之前的内容又有一點關系,所以正好有承上啟下的作用
來看看我們的場景
現在我們手上的這個工作表裡面有兩個表,一個就是成績總表,一個就是模闆,類似于我們通知的模闆,
我們現在需要将總成績的表中所有的同學的成績按照模闆中指定的樣式進行填充,并且形成一個人一個工作表的樣式來進行打印,并交給學生查看。如果手動複制粘貼,這個工作量就非常的大了,因為不僅僅是複制粘貼,還要找到正确的位置,所以這裡我們需要使用VBA來幫助我們實現這樣的功能。
Sub sssss() Dim rng As Range, sth As Worksheet, sthn As Worksheet Set rng = Application.InputBox("請選擇數據源,不含表頭", "數據源的确定", , , , , , 8) For i = 1 To rng.Rows.Count arr = rng.Rows(i) Worksheets("模闆").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = arr(1, 1) Set sthn = ActiveSheet sthn.Cells(4, 3) = arr(1, 1) sthn.Cells(4, 5) = arr(1, 2) sthn.Cells(6, 4) = i sthn.Cells(8, 4) = arr(1, 3) sthn.Cells(9, 4) = arr(1, 4) sthn.Cells(10, 4) = arr(1, 5) sthn.Cells(11, 4) = arr(1, 6) sthn.Cells(12, 4) = arr(1, 7) sthn.Cells(13, 4) = arr(1, 8) Next i End Sub
看着代碼挺長,請示非常的簡單,中間一大段都是理解之後就非常的簡單了。
先來看下效果
首先我們需要選擇好數據源的範圍,這裡的數據源我的設計是不含表頭的,因為在這裡表頭并沒有任何的用處,我們可以根據實際的需要進行調整數據的位置
确定了數據源的範圍之後,程序就可以開始運作了,我們來看看最終的結果
我們選擇最後一個A22的成績來對比下,看看是否正确
完全是沒有問題的,非常的完美。
代碼分析
雖然說今天的代碼比較的長,但是理解之後就會覺得非常的簡單,我們來看看代碼的操作流程
Set rng = Application.InputBox("請選擇數據源,不含表頭", "數據源的确定", , , , , , 8)
首先我們确定數據源的範圍,這裡前面也說明了不需要選擇表頭,大家可能比較的疑惑,不是應該對着表頭來填入數據嘛
我們來看看模闆終端這些字段,我們都能夠在内容中找到數據源中找到具體的位置,并且格式都是固定的,這個時候我們反而不需要那麼麻煩去通過表頭來選擇,直接通過固定的位置來選擇反而更加的快,而且代碼簡單
然後我們将數據源的每一行,裝入數組中,這樣每一行都是一個數組,我們隻需要将數組中的内容填入新建的工作表中對應的位置就可以了。
可以看出來,數組中每個元素的順序正好就是每一行數據的順序,我們有了這個順序之後就可以根據字段在模闆中的位置,來進行一一對應了。
姓名是在模闆中的cells(4,3)的位置,而姓名在數組中是第一個,所以是arr(1,1)
最終結果就是
sthn.Cells(4, 3) = arr(1, 1)
其他的都是按照這個标準依次類推,就算是這個過程中出現了某些字段沒有按照這個順序來的,也不要緊,我們直接在代碼中進行更改就可以了。 更成對應的位置
假設我們這裡講化學和物流的位置更換下
我們也僅僅是需要更換下代碼中的順序就可以了
=======================================================
本節課的案例源碼已經上傳,需要的小夥伴後台私信“7-47-05”,希望大家多支持~~,多多關注 ~ ~
好了,明晚19:00,準時再見!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!