原創(chuàng)作者: 盧子 轉(zhuǎn)自:Excel不加班
要生成30個日報(bào)表,估計(jì)你是一個個操作,移動復(fù)制重命名,改了大半天。有了VBA以后,就可瞬間生成,點(diǎn)一下按鈕全搞定。
其實(shí),實(shí)際工作中,很多東西都可以靠VBA生成的。VBA并不遙遠(yuǎn),而是與你的工作息息相關(guān)。
你也不要把VBA想得太復(fù)雜,跟著盧子學(xué)習(xí)就行,其他別想。
還是老套路,用最原始的方法操作,先錄制宏,再慢慢改代碼完善。
Step 01 錄制一個宏,將模板移動或復(fù)制,移至最后,勾選建立副本。
Step 02 點(diǎn)VB進(jìn)入后臺,再點(diǎn)模塊,就可以看到剛剛錄制的宏。
Sheets('模板').Select 選擇模板這個工作表。
中間那句不用管,沒啥意義。
Sheets('模板').Copy After:=Sheets(1) 將模板復(fù)制到第1個工作表后面。Copy復(fù)制,After之后,即使不會英語,你都可以大概猜出意思。
現(xiàn)在要實(shí)現(xiàn)的效果就是,每復(fù)制一次,都在最后工作表的后面創(chuàng)建一個新表。第1次就在表1后面,第2次就在表2后面,第3次就在表3后面。
前面學(xué)了循環(huán)語句,你可能想到通過i這個變量來實(shí)現(xiàn),其實(shí)還有一個更智能的。Sheets.count就是計(jì)算工作表的個數(shù)。
現(xiàn)在語句就改成Sheets('模板').Copy After:=Sheets(Sheets.Count)。
生成新表的同時對該表進(jìn)行命名,Sheets.Name就是工作表的名稱,名稱依次等于1日、2日、3日……此時通過For Next循環(huán),讓i變量隨著循環(huán)次數(shù)變更來實(shí)現(xiàn)。
Sheets(Sheets.Count).Name = i & '日'
將剛剛說的內(nèi)容綜合起來代碼就出來了。
還有一個小問題,就是在每個表的A2生成日期。
Sheets.Range代表某個表的單元格,日期前面部分是固定的為 '2020/6/' 再連接變量i就可以。
Sheets(Sheets.Count).Range('a2') = '2020/6/' & i
到此,完整的代碼就出來了。
Sub rb()
Dim i As Integer
For i = 1 To 30
Sheets('模板').Select
Sheets('模板').Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = i & '日'
Sheets(Sheets.Count).Range('a2') = '2020/6/' & i
Next
End Sub
Step 03 將復(fù)制的模板手工刪除掉,運(yùn)行代碼,即可生成日報(bào)。
在寫VBA代碼的時候,不區(qū)分大小寫,會自動幫你更正。很多單詞也可以不用記住,在輸入的時候會自動提示,按Tab鍵可以補(bǔ)齊。其實(shí)就跟寫函數(shù)一樣。
最后,如果需要按月匯總30個表格,也很簡單,因?yàn)槭荲BA生成的格式都一樣,只需一個SUM函數(shù)就解決。
=SUM('1日:30日'!B4)
寫代碼的時候,你某些語句不懂寫,可以錄制一個宏,這樣就會將難度降低,平常我都是這樣做。
將錄制宏學(xué)好了,后面再慢慢接觸一些新語句,其實(shí)需要記住的新語句也沒多少。最常用的就是循環(huán)語句For Next,已經(jīng)連續(xù)學(xué)了4天。
留一個小練習(xí)給你,前面都是用具體數(shù)字,比如12這種,現(xiàn)在改成通用的,不管有多少表格,都可以提取到目錄。
Sub 提取目錄()
For i = 1 To 12
Sheets(1).Range('c' & i + 1) = Sheets(i + 1).Name
Next
End Sub