還記得之前寫(xiě)過(guò)的關(guān)于制作工資條的方法嗎(原文)照激?有一種一勞永逸的方法沒(méi)有介紹,那就是自動(dòng)工資條。
在講解這種方法之前,我們來(lái)回憶一下最傳統(tǒng)的制作工資條并打印的方法:手動(dòng)插入行->復(fù)制图仓、插入工資表頭->設(shè)置工資條所在單元格的格式->逐條打印工資條。我們會(huì)發(fā)現(xiàn)但绕,其實(shí)過(guò)程中只需要幾個(gè)相同的命令救崔,操作雖然簡(jiǎn)單,但是效率之低簡(jiǎn)直令人發(fā)指。
在Excel中帚豪,像以上這種重復(fù)的操作碳竟,隨處可見(jiàn)。我們會(huì)聯(lián)想狸臣,生活中也有類似的場(chǎng)景。比如街邊賣水果的商販昌执,為了吸引行人的注意力烛亦,整天都在重復(fù)著相同的叫賣聲。一遍又一遍的吆喝著廣告語(yǔ)懂拾,念到后來(lái)煤禽,嗓子已經(jīng)麻木了,完全不走心了岖赋,嗓子都冒煙了檬果。
為了解決這一問(wèn)題,聰明的商販想到了用喇叭把叫賣的聲音錄制下來(lái)唐断,然后按下錄音喇叭上的播放按鈕选脊,喇叭就會(huì)自動(dòng)重復(fù)的播放錄下的語(yǔ)音。這樣商販就會(huì)有更多的時(shí)間和經(jīng)歷去忙其他的事情了脸甘。
工作中的技巧源于生活中的啟發(fā)恳啥,那么Excel中是不是也有相似的神操作呢?當(dāng)然有了丹诀,Excel中也有類似的“錄音設(shè)備”钝的,使用錄音設(shè)備可以記錄下在Excel中的操作,當(dāng)需要重復(fù)相同操作時(shí)铆遭,只需要像播放聲音一樣“播放”這段被錄制的操作就可以了硝桩。
在Excel中,被錄制的一串操作叫做宏枚荣,用來(lái)錄制的工具叫做宏錄制器碗脊。
一、Excel VBA基礎(chǔ)操作
1棍弄、錄制宏
(1)選中工資表的A1單元格望薄,執(zhí)行【開(kāi)發(fā)工具】-【錄制宏】命令,調(diào)出【錄制宏】對(duì)話框
(2)設(shè)置宏的名稱呼畸,方便以后的使用痕支,保存在當(dāng)前的工作簿,確定蛮原;
(3)引用模式切換為相對(duì)應(yīng)用卧须;
(4)執(zhí)行一遍制作的過(guò)程:在第2條工資記錄前插入兩個(gè)空行;復(fù)制工資表頭到記錄前的空行中;選中A4花嘶,即剩余工作表頭的第1個(gè)單元格笋籽,【停止錄制】
2、宏重現(xiàn)
3.添加按鈕椭员,并指定宏
效果:
注意:將文件保存為.xlsm格式
思考:我們會(huì)想车海,如果數(shù)據(jù)很多的話,光點(diǎn)擊按鈕也很費(fèi)事隘击,怎樣做到點(diǎn)擊一下就完成呢侍芝?這就涉及到代碼的部分了,循環(huán)操作埋同。
二州叠、Excel VBA代碼操作
代碼部分會(huì)在以后分解講解。
查看代碼的方法:【選中按鈕】-【Visual Basic】
生成工資條代碼:
Public Sub gongzitiao()
Dim i As Integer, row As Integer, col As Integer
t = Timer '計(jì)時(shí)器
Application.ScreenUpdating = False '禁止刷新
? ? row = Range("a1").CurrentRegion.Rows.Count '當(dāng)前區(qū)域A1行數(shù)
? ? col = Range("a1").CurrentRegion.Columns.Count
? ? For i = row To 3 Step -1
? ? ? ? Rows(i).Insert '對(duì)象.方法插入行
? ? ? ? Range(Cells(1, 1), Cells(1, col)).Copy Destination:=Range(Cells(i, 1), Cells(i, col))
? ? Next
? ? If MsgBox("是否插入空行", vbYesNo + vbQuestion, "制作工資表") = vbYes Then
? ? ? ? For i = row * 2 - 3 To 3 Step -2
? ? ? ? ? ? Rows(i).Insert
? ? ? ? Next
? ? Else
? ? GoTo home
? ? End If
home:
MsgBox Format(Timer - t, "0.00") & "秒 生成工資條完畢"
'*********2020年4月20日凶赁,chentom2020
End Sub
恢復(fù)原狀代碼:
Public Sub recover()
Application.ScreenUpdating = False
? ? ? ? ? ? For i = Cells(Rows.Count, 1).End(xlUp).row To 2 Step -1
? ? ? ? ? ? ? ? If Cells(i, 1) = Range("a1") Or Len(Cells(i, 1)) = 0 Then '判斷
? ? ? ? ? ? ? ? ? ? Rows(i).Delete
? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ?Next
? ? ? ? Application.ScreenUpdating = True
? ? ? ? MsgBox "恢復(fù)初始狀態(tài)"
'*********2020年4月20日咧栗,chentom2020
End Sub
效果: