VBA基礎實戰(zhàn)之自動化錄入表單

大家好,我是一分鐘學Excel。經(jīng)過前幾期視頻的VBA基礎學習后,是時候來一波實戰(zhàn)檢驗自己的學習水平啦!
今天的挑戰(zhàn)很簡單,用最基礎最簡單的VBA語句來實現(xiàn)自動化錄入表單。實現(xiàn)效果如下:

從演示效果中,我們可以發(fā)現(xiàn),程序具備的功能為提供一個可輸入的主頁工作表,輸入的信息會自動填充到詳細信息的表格之中。這樣的功能在日常生活中也會用到,接下來,讓我們正式開場吧~

首先,先別著急,先來思考一下,不用代碼,怎么去完成這樣一個功能?我猜你會這樣做,先復制主頁工作表中的內(nèi)容,然后跳轉到詳細信息工作表中,運用選擇性粘貼功能將其粘貼。就像這樣:

其實這樣的思路也可以用來編寫程序。因為開頭的時候有說過,我們是以最簡單最基礎的VBA語句來實現(xiàn),所以我們將思路整理一下,分別為這三步:
選中單元格并進行內(nèi)容復制;
跳轉工作表進行選擇性粘貼;
完成粘貼后進行主頁工作表內(nèi)容清空。
根據(jù)這三步的內(nèi)容,我們分別展開VBA語句編寫。首先,我們需要明白,一個VBA程序的誕生是由Sub語句開始的,中間跟上程序功能代碼,最后以End Sub進行結尾。

所以在最開始,需要先寫上Sub語句,Sub單詞后跟上空格在跟上程序名,這時候按下鍵盤上的回車鍵,VBA會自動識別,填充上括號及End Sub語句。

好,準備工作完畢?,F(xiàn)在可以開始第一步:選中單元格并進行內(nèi)容復制。
一、選中單元格并進行內(nèi)容復制

從表格中,我們可以看出C6、C8、C10單元格中是輸入信息的單元格。也就是說,我們首先需要選中這三個單元格,然后進行復制。
我們試著用英文去進行翻譯【選中單元格區(qū)域】這句話。區(qū)域、范圍的英文為:Range,選中、選擇的英文為:select。而在VBA中,【選中單元格區(qū)域】這句話的代碼表示為:
代碼
'step1:選中區(qū)域 '?
Range("C6,C8,C10").Select
單引號在VBA中表示注釋,文字兩側加上一組單引號的注釋并不會被程序執(zhí)行,只做提示作用。養(yǎng)成寫注釋的好習慣,有利于理清思路。

從上可知,【選中單元格區(qū)域】的VBA語法為Range跟上括號,括號中是區(qū)域名(多個區(qū)域需用逗號進行分割)然后跟上點號,點號的作用為調(diào)用,調(diào)用什么方法,后方的Select便是Select方法,作用為選中。簡單來說,VBA的語法與我們平時習慣的中文語法相反,翻譯過來便是C6—C10單元格區(qū)域調(diào)用Select方法。

這樣來看,你也許會發(fā)現(xiàn)一個規(guī)律。VBA語法往往是主語(如單元格區(qū)域)然后調(diào)用,調(diào)用為點號,點號后跟上對應的方法即可。不過,都是英文哦~
編寫完這句語句后,我們可以點擊上方菜單欄去看看運行效果是否如同預想的一樣,C6—C10單元格區(qū)域被選中。
運行結果

選中的問題結束后,便到了復制的功能。同樣的,靈活變通一下,即使寫不出來,你也應該能夠猜到,VBA的表現(xiàn)形式為:選中區(qū)域.復制
剩下的就很簡單了,翻譯它即可。注意選中后的區(qū)域應該是名詞,select為動詞,selection為名詞。再配上點號與復制的英文(copy)即可。
代碼
'step2:內(nèi)容復制'?
Selection.Copy
運行結果

二、跳轉工作表進行選擇性粘貼
【跳轉工作表進行選擇性粘貼】顧名思義,首先需要先跳轉工作表,跳轉工作表的實際操作為點擊工作表即可,與上文的選中單元格區(qū)域一樣。使用工作表("表名").Select 來實現(xiàn)效果:
代碼
'step3:選中詳細信息工作表'?
Sheets("詳細信息").Select
工作表跳轉之后,面臨一個問題。如何讓VBA識別空白區(qū)域進行粘貼?
我的想法是,讓VBA先識別到表格的尾部區(qū)域,然后再向下移一格。從而到達表格最下方的空白區(qū)域,就像這樣:

這里就需要借助一些方法來進行實現(xiàn),分別是:
Range("A1")定位單元格
End(xlDown)移動到表格最尾部
Offset(1,0)定位下移一格

Range()前面我們學習過它的用法,至于End()與Offset()這里簡單提一下。首先End()是以Range單元格為基準定位到其上、下、左、右最后一個有數(shù)據(jù)的單元格。
xlup上; xldown下; xltoleft左; xltoright右
Offset()是以當前單元格為基準根據(jù)括號中的內(nèi)容進行對應移動。Offset(行數(shù),列數(shù))。如Offset(1,0)向下移一行,移0列。
定位的問題解決后,便是一個本文的重點:【選擇性粘貼】

選擇性粘貼作為本文的一大難點,涉及到的英文很多,但是沒關系,看看這兩張圖,會容易理解得多。首先,VBA中想要使用選擇性粘貼這個功能,可以用Range對象的PasteSpecial方法。它與Excel函數(shù)一樣,有參數(shù)。語法為:
PasteSpecial(Paste,Operation,SkipBlanks,Transpose)?
PasteSpecial(粘貼方式,運算方式,是否跳過空白格,是否轉置)
通過我們常用的選擇性粘貼的圖來對比學習,要容易理解一些:

仔細觀察圖片與語法,你會發(fā)現(xiàn),對應四個參數(shù)的恰好就是圖片中的四個功能選項(粘貼、操作、跳過空單元、轉置)

問題來了,參數(shù)如何編寫呢?

對照上圖,我們需要執(zhí)行的操作為:執(zhí)行粘貼【值】,操作【無】,不需要跳過單元格,需要轉置。則代碼為:

代碼
'step5:選擇性粘貼內(nèi)容'
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
? ? ? ?:=False, Transpose:=True
運行結果

功能基本上都完畢了,最后便是第三步:完成粘貼后進行主頁工作表內(nèi)容清空。
三、完成粘貼后進行主頁工作表內(nèi)容清空
相信到第三步,你的心里大多已經(jīng)有了思路。首先,跳轉主頁工作表,很簡單:
代碼
'step6:返回主頁清空內(nèi)容'?
Sheets("主頁").Select
清空內(nèi)容也很簡單,在選中的單元格區(qū)域進行調(diào)用清空方法即可。
代碼
Selection.ClearContents
到這里,所有程序功能便編寫完畢了。完整代碼如下:
為了方便錄入,我們可以對表格進行美化,之后添加一個圖形作為按鈕來觸發(fā)VBA程序。
創(chuàng)建好圖形后,右鍵點擊指定宏,選擇宏名即可。

最后,你可以將整張工作表進行鎖定,只提供三個單元格供于使用者進行輸入。
在鎖定之前,先取消掉單元格的保護模式。

好了,以上便是本期的所有內(nèi)容啦。目前這個程序并不完善,不具備查重功能也不具備錯誤提示,只作為基礎練習所用。后面,我們會進一步的運用更多的VBA知識對此程序進行進一步的完善。下次再見啦~
