我之前也嘗試學習過網(wǎng)上流傳比較廣泛的Python和C#語言。對于我這種零編程基礎(chǔ)的人來說,跟著網(wǎng)上的教程一步一步的學習,也能夠?qū)W會,但是學習成本比較高。使用這些語言搜索語句時,不如VBA這種老舊的語言快捷,需要一定的門檻。比如,使用VBA語言,直接查詢“VBA xx功能”就能找到相關(guān)的語句,如果使用C#的話,就需要在大量的語句中,找到自己需要的那一條,還沒有注解,實在有點難。
如果使用C#的話,確實更加靈活高效(例如下圖的軟件,就是使用C#編寫的小軟件)。建議各位讀者自己學習其它更高效的語言,能夠少走彎路,更具有普適性。
最后我用來實現(xiàn)在Excel中編寫工具箱的語言,使用的還是Excel自帶編寫宏程序的VB語言,學習成本更低,更快上手。
首先需要聲明的是,我基本上沒有編寫程序的能力,我的程序大部分都是思考我需要的功能,通過以下方式編寫。
思考功能,例如“如何獲取工作表的最后一行”,在搜索引擎搜索:“工作表最后一行 VBA”。在別人的程序中復(fù)制。
使用Excel自帶的錄制宏功能,手動操作一遍,再把程序復(fù)制下來,根據(jù)實際情況調(diào)整。
找同事的程序,截取需要的功能,改造。
使用VBA編程上手門檻低,一般情況下只要有基礎(chǔ)的程序能力(例如大學學習過相關(guān)C語言等課程,或能夠熟練使用Excel里的公式)就可以直接上手實現(xiàn)一些簡單的功能,在編寫功能中不斷學習基礎(chǔ)的語句。
但同時也要指出,由于我個人因為沒有系統(tǒng)的學習過VBA語言,所以我的知識體系比較片面,可能會因為不知道某個語句的存在,重復(fù)編寫很多語句,只為了實現(xiàn)某個簡單的功能。
例如,插入一行,只需要編寫“Rows('10:10').Insert”,如果你不會使用循環(huán)語句,卻想要插入100行時,將上述語句重復(fù)100次,也能達到效果。如果會使用循環(huán)語句,則很簡單。
創(chuàng)建宏程序(Visual Basic)、錄制宏程序(錄制宏)、使用宏程序(宏),都在Excel上方的開發(fā)工具中。
進入Visual Basic中,選擇需要儲存程序的工作薄,創(chuàng)建模塊,以后我們的程序都會在模塊中編寫。(個人習慣使用模塊,也可以在Sheet或ThisWorkbook中編寫)
一般的程序,是以Sub為開頭的組合,例如下圖,為一個程序名為SuperLink的宏程序。
上圖功能為運行一個彈窗“Hello World”的程序。(沒有人在編程生涯中能拒絕Hello World)
我們以某一個需求功能為例,一步一步展示我的編程步驟,最后展示一下完整的程序。
我們常用的工作簿中工作表過多,不方便查找,如果能給工作簿做一個目錄,就可以方便的核對該工作簿中有哪些工作表。如果能給這個目錄做超鏈接,就能更好的直接連接到需要的工作表處。
目錄,需要存放在一個工作表中,我們的第一個需求,就是建立一個目錄工作表,并起一個名字,比如就叫SuperLink。
搜索或錄制宏得知,建立工作表的語句為:
Sheets.Add after:=Sheets(1)
Sheets(2).Name = 'SuperLink'
該語句會在原工作簿第一個工作表后插入一個工作表,并修改名字為SuperLink。
完成本步驟后,可運行程序嘗試效果(F5為直接運行,F(xiàn)8為逐語句運行)
搜索得知,讀取工作表名字的語句為:
For i = 1 To Worksheets.Count
link = Sheets(i).Name
next i
此處把每一個工作表的名字都寫入了一個叫l(wèi)ink的變量中(名字隨便起)
在循環(huán)中,每次link都被覆蓋掉了,沒有保存下來,所以我們要將這個名字儲存到上一步建立的SuperLink工作表中。所以語句將變成
For i = 1 To Worksheets.Count
link = Sheets(i).Name
Sheets('SuperLink').Range('A' + Trim(Str(i))) = link
next i
新加的語句,是將每一次的Link變量的值,儲存到SuperLink工作表的A列中,隨著循環(huán)語句i的增加,分別儲存到A1、A2、A3……單元格中。
目前完整程序?qū)⑹牵?/span>
Sub 基礎(chǔ)程序01—SuperLink() '建立超鏈接目錄superlink
Sheets.Add after:=Sheets(1)
Sheets(2).Name = 'SuperLink'
For i = 1 To Worksheets.Count
link = Sheets(i).Name
Sheets('SuperLink').Range('A' + Trim(Str(i))) = link
next i
End Sub
Sub程序名字按自己需求隨便起,所有單引號’后的內(nèi)容均自動識別為批注內(nèi)容。注意符號均應(yīng)為英文。完成本步驟后,可運行程序嘗試效果。
搜索得知,添加超鏈接的語句為:
With Sheets('SuperLink')
.Hyperlinks.Add Anchor:=.Range('A' + Trim(Str(i))), Address:='', SubAddress:= ''' + link + ''' + '!A1'
.Range('A' + Trim(Str(i))) = link
End With
With語句是為了省略原語句中重復(fù)的值。
Sheets('SuperLink').Range('A' + Trim(Str(i))) = link
等同于
With Sheets('SuperLink')
.Range('A' + Trim(Str(i))) = link
End With
注意range前需要有.代表.前的內(nèi)容為with的值。(表達不太好,自行理解下)
Hyperlink.add為增加超鏈接的語句。連接到名稱為Link的工作表的A1單元格。
實用中發(fā)現(xiàn),直接增加超鏈接,部分文字格式可能會有問題(例如自動轉(zhuǎn)化為數(shù)字格式或日期格式,導(dǎo)致名稱錯誤)所以增加超鏈接后,又重新賦予了一遍單元格名稱。
至此程序編寫完成。
與上文相比,我的程序又增加了如下功能:
用dim提前定義使用的變量,不定義也能使用,不過建議大家養(yǎng)成良好的習慣,提前定義,方便使用。
刪除原工作薄中,名稱為Superlink的工作表,防止重名。
定義目錄頁的A列寬度,方便查看。
為目錄頁相關(guān)項保留工作表名稱顏色。
生成完畢后彈窗說明。
使用語句除了講解過了,就是for循環(huán)語句和if判斷語句,都比較好理解,僅看英文的意思,就能夠清楚功能。大家也可以根據(jù)自己的需要,增加自己額外的功能。
希望各位能夠編寫出自己需要的小程序。
聯(lián)系客服