周五下班,小宇問我“這期文章主題是啥”。
“Excel中VBA編程的具體實(shí)現(xiàn)呀”
“為什么會(huì)寫這個(gè),有什么用嗎?”
你們也這樣覺得嗎?那我就來結(jié)合工作實(shí)踐講講這個(gè)有什么用。
在工程開發(fā)中,比如A同事從事汽車控制策略開發(fā),我們都知道這是個(gè)設(shè)計(jì)與驗(yàn)證不斷迭代的過程?,F(xiàn)在到了實(shí)車驗(yàn)證階段,用can卡去車上采集信號(hào)數(shù)據(jù),發(fā)現(xiàn)有些數(shù)據(jù)結(jié)果不對(duì)?,F(xiàn)在打算從采集的數(shù)據(jù)當(dāng)中篩選一些特定的工況數(shù)據(jù),導(dǎo)入模型進(jìn)行再次驗(yàn)證??墒窃O(shè)備采樣周期設(shè)置的是10ms,半小時(shí)的數(shù)據(jù)保存在Excel中就上萬(wàn)行,一個(gè)個(gè)去找不太現(xiàn)實(shí)。這個(gè)時(shí)候我們可以用VBA編程設(shè)定具體的條件,讓代碼幫我們篩選出想要的數(shù)據(jù)。
在辦公室日常管理中,比如B同事負(fù)責(zé)單位人員出勤統(tǒng)計(jì),需要統(tǒng)計(jì)本月每位員工的到崗、遲到、曠工、出差、休假等情況。偶爾一次還好,如果每個(gè)月都要做這方面工作的話,我們是不是應(yīng)該考慮做個(gè)小工具一勞永逸呢?
以上功能都可以用VBA編程實(shí)現(xiàn),而且實(shí)現(xiàn)起來也很簡(jiǎn)單。下面就讓我們來聊一聊如何實(shí)現(xiàn)VBA編程。(本篇僅適于VBA編程入門學(xué)習(xí))
本篇會(huì)出現(xiàn)一個(gè)高頻詞匯,“宏”。簡(jiǎn)單點(diǎn),可以把它理解為一些程序代碼的封裝,來完成一些具體的操作。
使用Excel調(diào)用VBA程序(即宏),先要進(jìn)行一些設(shè)置:
03版本Excel的操作為【工具】-【宏】-【安全性】,彈出如下菜單(圖1)。我們?cè)贓xcel中調(diào)用宏,需要將安全級(jí)設(shè)為中或低。設(shè)置完后重啟Excel。
圖1 安全性設(shè)置
WPS中的宏操作工具欄一目了然,比03版操作起來順手很多。界面如圖2所示。
圖2 wps宏工具欄
下面我們以WPS10.1版本為例進(jìn)行介紹,03、07版的具體操作和WPS差不太多,基本功能都是一樣的。
創(chuàng)建宏:
根據(jù)宏的觸發(fā)執(zhí)行方式不同,創(chuàng)建方式也不同。宏有兩種觸發(fā)執(zhí)行方式,一種是直接運(yùn)行,另一種是和控件關(guān)聯(lián),通過按鈕等控件觸發(fā)程序執(zhí)行。
創(chuàng)建方法:
①直接運(yùn)行的宏:點(diǎn)擊“宏”-輸入要?jiǎng)?chuàng)建的“宏”名-創(chuàng)建,即可。
②關(guān)聯(lián)控件的宏:“查看代碼”右側(cè)有很多小控件可供選擇,選中控件放在表中,右鍵可對(duì)控件的屬性進(jìn)行設(shè)置,左鍵雙擊可進(jìn)入代碼編輯窗口。如圖3所示。
圖3 VBA代碼編輯窗口
在代碼編輯窗口,我們可以查看每個(gè)sheet中的VBA程序,進(jìn)入編輯窗口的方式有很多,點(diǎn)擊VB編輯器、查看代碼或Alt F11均可。
創(chuàng)建宏之后,代碼窗口會(huì)自動(dòng)生成Private Sub…End Sub,然后我們將想要執(zhí)行的操作用程序語(yǔ)言描述清楚填入即可。這里對(duì)Sub簡(jiǎn)單擴(kuò)展一下,Sub類似我們編寫程序時(shí)自定義函數(shù)Function,區(qū)別是調(diào)用Sub子程序時(shí)沒有返回值,而且可以直接執(zhí)行(F5或鏈接到按鈕控件),不需要由主函數(shù)調(diào)用執(zhí)行。所以,拿來處理一些任務(wù)是很方便的。
宏代碼:
接下來講講VBA編程的常用命令語(yǔ)句。對(duì)學(xué)過C語(yǔ)言的人來說,這部分其實(shí)很簡(jiǎn)單,也很好學(xué)。我將主要的知識(shí)點(diǎn)做成了圖片,如圖4所示。
圖4 VBA編程常用命令
注意圖3,左側(cè)WPS表格對(duì)象Sheet1(Sheet4),“Sheet1”是工作表序號(hào),“Sheet4”是工作表名稱。這里我們使用'Sheetx.Cells ( m,n )'指定單元格時(shí),使用工作表序號(hào)。
當(dāng)我們的操作對(duì)象類型不一致時(shí),需要用強(qiáng)轉(zhuǎn)命令轉(zhuǎn)換對(duì)象類型。在上上期《趣事-合并單元格》中,我們使用Cstr將數(shù)值型數(shù)據(jù)轉(zhuǎn)為字符型,然后進(jìn)行單元格內(nèi)容合并。
運(yùn)行宏:
在代碼編輯窗口,按下F5程序就被執(zhí)行。退出編輯窗口,如果是和控件關(guān)聯(lián)的程序,點(diǎn)擊控件按鈕,程序觸發(fā)執(zhí)行。非控件關(guān)聯(lián)程序,點(diǎn)擊【宏】,在界面選中要執(zhí)行的宏,運(yùn)行即可。
VBA編程不需要過于復(fù)雜的語(yǔ)句,只需要掌握基本的語(yǔ)言框架,能夠使用一些常用基本命令,if條件選擇,F(xiàn)or/While循環(huán)執(zhí)行基本就可以滿足工作中的需求。如果有不清楚的指令,還可以通過錄制宏來查找。所以,運(yùn)用起來也很簡(jiǎn)單。
I hear and I forget. I see and I remember. I do and I understand.
大家如果想真正掌握VBA編程這項(xiàng)技能并運(yùn)用到工作中,還是應(yīng)該多動(dòng)手實(shí)踐。
下面是開篇中講到的運(yùn)用VBA處理考勤統(tǒng)計(jì)的編程實(shí)例,感興趣的可以看一下。實(shí)現(xiàn)功能:點(diǎn)擊“考勤匯總”按鈕,自動(dòng)統(tǒng)計(jì)每個(gè)人的天數(shù)和工時(shí),并設(shè)置不同的單元格顏色對(duì)工時(shí)做出標(biāo)記。
圖5 待處理考勤表
圖6 處理結(jié)果
圖7 考勤處理代碼(參考)
篇幅有限,今天就介紹到這里吧!
分享個(gè)好消息,這周“四杯咖啡”終于收到了微信平臺(tái)的原創(chuàng)開通邀請(qǐng),從此,我們就有自己的留言板了!哈哈,好期待誰(shuí)會(huì)是第一個(gè)留言的呢?
聯(lián)系客服